来自android.webkit.WebViewClassic.loadDataWithBaseURL中的Webview的Java nullpointer异常

时间:2015-03-04 14:23:35

标签: android android-webview adview

根据this question中提供的建议,我修改了我的AdMob代码以符合建议,这有效地减少了出现的异常数量。然而,一个新的例外正在上升。

代码如下:

@Override
protected void onDestroy() {
    if ( adView != null ) {
          adView.destroy();
          adView = null;

          Log.i(ApplicationData.APP_TAG, TAG + ": OnDestroy, destroying the Adview");
     }

    super.onDestroy();
}

方法adView.destroy()似乎在LogCat消息发布时运行良好。在此消息之后,我在WebView上收到以下异常:

java.lang.NullPointerException
    at android.webkit.WebViewClassic.loadDataWithBaseURL(WebViewClassic.java:2741)
    at android.webkit.WebView.loadDataWithBaseURL(WebView.java:919)
    at com.google.android.gms.ads.internal.request.n.run(SourceFile:206)
    at android.os.Handler.handleCallback(Handler.java:725)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:153)
    at android.app.ActivityThread.main(ActivityThread.java:5297)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    at dalvik.system.NativeStart.main(Native Method)

不幸的是,我无法找到重现问题的方法,但是经常在生产中发生。我找不到任何问题,有人暗示我能做些什么吗?

2 个答案:

答案 0 :(得分:5)

其中一位Google移动广告SDK小组称(3月14日),

  

我们在首次报道时调查了此问题,并在Google Play服务中发布了修复程序。您应该会看到越来越少的实例作为您的用户'设备更新到新版本。

请参阅https://groups.google.com/forum/#!topic/google-admob-ads-sdk/oYpQI_L14Tg

答案 1 :(得分:2)

在调用loadDataWithBaseUrl之前销毁WebView(可能是其他线程)时会发生这种情况。在AdMob代码中,我看到他们现在处理如下

public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) {
        synchronized(this) {
            if(!this.isDestroyed()) {
                super.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);
            } else {
                Log.d("The webview is destroyed. Ignoring action.");
            }

        }
    }

所以现在不应该发生。