onPagefinished的Andr​​oid的WebView函数被调用两次 [英] android webview function onPagefinished is called twice

查看:1705
本文介绍了onPagefinished的Andr​​oid的WebView函数被调用两次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Andr​​oid的WebView功能 onPageFinished 被调用了两次。我不知道为什么,但它运作良好,在Android 2.2,但是当我升级到4+它不工作。 code连接下面

code

  @覆盖
            公共无效onPageFinished(的WebView视图,字符串URL){
                如果(url.startsWith(MobileConstants.PUSHPIN_CALLBACK_URL)){
                    如果(url.indexOf(code =)!= - 1){                        字符串code = url.substring(url.indexOf(code =)+ 5);
                        Log.i(code,code);
                        如果(code =空&安培;!&安培;!code.equals()){
                            view.setVisibility(View.GONE);
                            令牌的accessToken = service.getAccessToken(空,新的验证(code));
                            Log.i(的access_token,accessToken.getToken());
                            共享preferences设置= getShared preferences(的access_token,0);
                            共享preferences.Editor编辑= settings.edit();
                            如果(accessToken.getToken()!= NULL)
                                editor.putString(的access_token,accessToken.getToken());
                            意图MAP3 =新意图(OAuthAccessTokenActivity.this,Dashboard.class);                            map3.putExtra(的access_token,accessToken.getToken());
                            startActivity(MAP3);
                        }
                    }否则如果(!url.indexOf(错误=)= - 1){
                        view.setVisibility(View.INVISIBLE);                    }                }
                的System.out.println(onPageFinished:+网址);            }

登录

  07-22 14:29:50.523:E / AndroidRuntime(1186):致命异常:主要
07-22 14:29:50.523:E / AndroidRuntime(1186):显示java.lang.NullPointerException
07-22 14:29:50.523:E / AndroidRuntime(1186):在com.facebook.android.OAuthAccessTokenActivity $ 1.onPageFinished(OAuthAccessTokenActivity.java:83)
07-22 14:29:50.523:E / AndroidRuntime(1186):在android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:327)
07-22 14:29:50.523:E / AndroidRuntime(1186):在android.os.Handler.dispatchMessage(Handler.java:99)
07-22 14:29:50.523:E / AndroidRuntime(1186):在android.os.Looper.loop(Looper.java:137)
07-22 14:29:50.523:E / AndroidRuntime(1186):在android.app.ActivityThread.main(ActivityThread.java:4745)
07-22 14:29:50.523:E / AndroidRuntime(1186):在java.lang.reflect.Method.invokeNative(本机方法)
07-22 14:29:50.523:E / AndroidRuntime(1186):在java.lang.reflect.Method.invoke(Method.java:511)
07-22 14:29:50.523:E / AndroidRuntime(1186):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)
07-22 14:29:50.523:E / AndroidRuntime(1186):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-22 14:29:50.523:E / AndroidRuntime(1186):在dalvik.system.NativeStart.main(本机方法)


解决方案

我从onPageFinished这个功能移动code解决这个问题。

code

  @覆盖
        公共布尔shouldOverrideUrlLoading(的WebView视图,字符串URL){            如果(url.startsWith(MobileConstants.CALLBACK_URL)){
                如果(url.indexOf(code =)!= -1){                    字符串code = url.substring(url.indexOf(code =)+ 5);
                    Log.i(code,code);
                    如果(code =空&安培;!&安培;!code.equals()){
                        view.setVisibility(View.GONE);
                        令牌的accessToken = service.getAccessToken(空,新的验证(code));
                        Log.i(的access_token,accessToken.getToken());
                        共享preferences设置= getShared preferences(的access_token,0);
                        共享preferences.Editor编辑= settings.edit();
                        如果(accessToken.getToken()!= NULL)
                            editor.putString(的access_token,accessToken.getToken());                        访问= accessToken.getToken();                        意图MAP3 =新意图(OAuthAccessTokenActivity.this,Dashboard.class);                        map3.putExtra(的access_token,accessToken.getToken());
                        startActivity(MAP3);
                        返回true;
                    }
                }否则如果(!url.indexOf(错误=)= - 1){
                    view.setVisibility(View.INVISIBLE);
                    返回false;
                }            }
            的System.out.println(onPageFinished:+网址);            返回super.shouldOverrideUrlLoading(查看,网址);        }

My android webview function onPageFinished is called twice. I don't know why, but it works well on android 2.2 but when I upgrade it to 4+ it does not works. Code is attached below

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)

解决方案

I solved the issue by moving the code from onPageFinished to this Function

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

        }

这篇关于onPagefinished的Andr​​oid的WebView函数被调用两次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆