2012-07-22 8 views
5

Meine Android-Webview-Funktion onPageFinished wird zweimal aufgerufen. Ich weiß nicht warum, aber es funktioniert gut auf Android 2.2, aber wenn ich es auf 4+ upgrade, funktioniert es nicht. Code angebracht ist unterandroid Webview-Funktion onPagefinished wird zweimal aufgerufen

Code

@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

Welches ist Zeile 83, die den Nullzeiger exceception macht? – charlypu

+0

Token accessToken = service.getAccessToken (null, neuer Verifier (Code)); Das Problem ist, sobald ich den Code bekomme, aber nachdem ich den Code bekomme, nachdem die Dinge in Ordnung gehen, erhalte ich Zugriffstoken, aber dann ruft er diese Funktion wieder auf, der Code ist abgelaufen und es gibt null Zeiger Ausnahme – Muneeb

+0

Ich habe das Problem gelöst, kann jemand sagen ich, wie man es beantwortet? – Muneeb

Antwort

2

ich das Problem gelöst, indem Sie den Code aus onPageFinished auf diese Funktion zu bewegen

Code

 @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

Ich hatte das gleiche Problem, aber ich musste nur einen Fortschrittsbalken stoppen. Ich "gelöst" es wieder den Fortschrittsbalken in der Methode onPageStarted starten. Es ist keine gute Lösung, aber in meinem Fall war es ausreichend.

Verwandte Themen