Функция веб-просмотра Android для onPagefinished называется дважды

Моя функция onPageFinished Android onPageFinished onPageFinished дважды. Я не знаю, почему, но он хорошо работает на Android 2.2, но когда я обновляю его до 4+, он не работает. Код прилагается ниже

Код

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

Журнал

 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) 

Я решил проблему, переместив код с onPageFinished на эту функцию

Код

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

У меня была та же проблема, но мне нужно было только остановить индикатор выполнения. Я «решил», чтобы снова запустить индикатор выполнения внутри метода onPageStarted. Это нехорошее решение, но в моем случае было достаточно.