2012-07-22 17 views
5

My android webview function onPageFinished se llama dos veces. No sé por qué, pero funciona bien en Android 2.2, pero cuando lo actualizo a 4+ no funciona. Código se adjunta a continuaciónandroid webview function onPagefinished se llama dos veces

Código

@Override 
      public void onPageFinished(WebView view, String url) { 


       if (url.startsWith(MobileConstants.PUSHPIN_CALLBACK_URL)) { 
        if (url.indexOf("code=")!=-1) { 

         String code = url.substring(url.indexOf("code=")+5); 
         Log.i ("code", code); 
         if (code != null && !code.equals("") ){ 
          view.setVisibility(View.GONE); 
          Token accessToken = service.getAccessToken(null, new Verifier(code)); 
          Log.i("access_token",accessToken.getToken()); 


          SharedPreferences settings = getSharedPreferences("access_token" , 0); 
          SharedPreferences.Editor editor = settings.edit(); 
          if(accessToken.getToken() != null) 
           editor.putString("access_token", accessToken.getToken()); 


          Intent map3 = new Intent(OAuthAccessTokenActivity.this, Dashboard.class); 

          map3.putExtra("access_token", accessToken.getToken()); 
          startActivity(map3); 
         } 


        } else if (url.indexOf("error=")!=-1) { 
         view.setVisibility(View.INVISIBLE); 

        } 

       } 
       System.out.println("onPageFinished : " + url); 

      } 

Entrar

07-22 14:29:50.523: E/AndroidRuntime(1186): FATAL EXCEPTION: main 
07-22 14:29:50.523: E/AndroidRuntime(1186): java.lang.NullPointerException 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at com.facebook.android.OAuthAccessTokenActivity$1.onPageFinished(OAuthAccessTokenActivity.java:83) 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:327) 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at android.os.Looper.loop(Looper.java:137) 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
07-22 14:29:50.523: E/AndroidRuntime(1186):  at dalvik.system.NativeStart.main(Native Method) 
+0

¿Cuál es la línea 83, que hace que la excepción del puntero nulo? – charlypu

+0

Token accessToken = service.getAccessToken (nulo, nuevo verificador (código)); el problema es que una vez que obtengo el código pero después de obtener el código después de que las cosas van bien, obtengo un token de acceso pero luego llama a esta función en este momento el código ha expirado y da una excepción de puntero nulo – Muneeb

+0

He resuelto el problema ¿alguien puede decir ¿Cómo puedo responderlo? – Muneeb

Respuesta

2

He resuelto el problema moviendo el código de onPageFinished a esta función

Código

 @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url){ 

      if (url.startsWith(MobileConstants.CALLBACK_URL)) { 
       if (url.indexOf("code=") != -1) { 

        String code = url.substring(url.indexOf("code=")+5); 
        Log.i ("code", code); 
        if (code != null && !code.equals("") ){ 
         view.setVisibility(View.GONE); 
         Token accessToken = service.getAccessToken(null, new Verifier(code)); 
         Log.i("access_token",accessToken.getToken()); 


         SharedPreferences settings = getSharedPreferences("access_token" , 0); 
         SharedPreferences.Editor editor = settings.edit(); 
         if(accessToken.getToken() != null) 
          editor.putString("access_token", accessToken.getToken()); 

         access = accessToken.getToken(); 

         Intent map3 = new Intent(OAuthAccessTokenActivity.this, Dashboard.class); 

         map3.putExtra("access_token", accessToken.getToken()); 
         startActivity(map3); 
         return true; 
        } 


       } else if (url.indexOf("error=")!=-1) { 
        view.setVisibility(View.INVISIBLE); 
        return false; 
       } 

      } 
      System.out.println("onPageFinished : " + url); 

      return super.shouldOverrideUrlLoading(view, url); 

     } 
0

Tuve el mismo problema, pero solo necesitaba detener una barra de progreso. Lo "resolví" comenzando de nuevo la barra de progreso dentro del método onPageStarted. No es una buena solución, pero en mi caso fue suficiente.

Cuestiones relacionadas