2012-07-22 19 views
5

La funzione di Webview di Android onPageFinished viene chiamata due volte. Non so perché, ma funziona bene su Android 2.2 ma quando lo aggiorno a 4+ non funziona. Codice è attaccato sottoLa funzione webview di Android onPagefinished viene chiamata due volte

Codice

@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); 

      } 

Log

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

Qual è la riga 83, che rende l'esecuzione puntatore null? – charlypu

+0

Accesso tokenToken = service.getAccessToken (null, new Verifier (code)); il problema è una volta che ottengo il codice ma dopo aver ottenuto il codice dopo che le cose vanno bene ottengo il token di accesso ma poi di nuovo chiama questa funzione in questo momento il codice è scaduto e dà un'eccezione del puntatore nullo – Muneeb

+0

Ho risolto il problema qualcuno può dire a me come rispondere? – Muneeb

risposta

2

ho risolto il problema spostando il codice onPageFinished a questa funzione

Codice

 @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

Ho avuto lo stesso problema, ma avevo solo bisogno di fermare una barra di avanzamento. L'ho "risolto" ricominciando la barra di avanzamento all'interno del metodo onPageStarted. Non è una buona soluzione, ma nel mio caso era sufficiente.

Problemi correlati