【问题标题】:What's causing this NullpointerException?是什么导致了这个 NullpointerException?
【发布时间】:2012-01-22 09:49:27
【问题描述】:

我收到了包含以下日志内容的崩溃报告:

java.lang.NullPointerException
at android.webkit.PluginFullScreenHolder.show(PluginFullScreenHolder.java:85)
at android.webkit.WebView$PrivateHandler.handleMessage(WebView.java:8553)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
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:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

我尝试在网络上搜索PluginFullScreenHolder,但第 85 行似乎是我找到的课程中的评论。

我猜测崩溃与 WebView 有关 - 可能是因为我正在尝试加载 null,但我对此非常不确定,尤其是因为我没有看到 URL 的方法成为null

我相信该报告来自 Galaxy Nexus(在 Android 4.0 上),如果这有什么不同的话,但我不确定。如果不是,那就是 Honeycomb 设备。

PluginFullScreenHolder经验的人吗?

这是我的代码

web = (WebView) findViewById(R.id.webView1);
web.setBackgroundColor(android.R.color.black);
web.getSettings().setJavaScriptEnabled(true);
web.getSettings().setPluginsEnabled(true);
web.getSettings().setUserAgent(1);
web.getSettings().setSupportZoom(false);
web.loadUrl("http://www.justin.tv/widgets/live_embed_player.swf?auto_play=true&fullscreen=true&start_volume=100&hostname=www.justin.tv&channel=" + this.getIntent().getExtras().getString("channelName"));

奇怪的是,来自 Market 的崩溃报告没有提到任何关于我的代码的内容 - 从来没有提到过 - 您正在查看上面的完整日志。毫无疑问,它是 PluginFullScreenHolder.java。

编辑 2:

找到正确的类:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/webkit/PluginFullScreenHolder.java#PluginFullScreenHolder.show%28%29

有问题的行是:

client.onShowCustomView(mLayout, mOrientation, mCallback);

【问题讨论】:

    标签: android nullpointerexception


    【解决方案1】:

    我不知道它是否有用并且不确定,但似乎异常与超类有关:

    android.app.Dialog
    

    在方法show()中。

    您可能想看看source code

    【讨论】:

      【解决方案2】:

      这里是PluginFullScreenHolder.javasource code for android 4.0

      在第 84 行,您有 mWebView.getWebChromeClient(),它根据您的异常返回 null(它在第 85 行使用,没有进行 null 检查)。

      一种解决方法是设置一个空的 WebChromeClient(当发生可能影响浏览器 UI 的事情时调用它,例如,在此处发送进度更新和 JavaScript 警报):

      web.setWebChromeClient(new WebChromeClient());
      

      但这真的很奇怪,因为它不应该为空。

      【讨论】:

      • 呃,是的,这真的很奇怪。愚蠢的是,我无法测试它是否已修复,因为我无法重现该错误。不过,我会试一试。
      • 这个修复对我有用,这是由于我在 webview 中加载的网页有一些功能可以全屏显示,单击“全屏”会导致应用程序崩溃。
      【解决方案3】:

      你尝试过初始化“web”吗?

      WebView web = new WebView(this);
      web = (WebView) findViewById(R.id.webView1);
      

      如果你这样声明你的变量

      private WebView web;
      

      你会得到 NullpointerExeption,你必须初始化对象。

      【讨论】:

      • 这或多或少是多余的,因为您在第二行重新分配了 web 变量,但是谢谢。
      • WebView web = new WebView((WebView) findViewById(R.id.webView1));如果您愿意...
      • 那更糟而且行不通。 WebView 构造函数没有 WebView 参数。它与初始化无关 - WebView 显示得很好并加载了正确的页面。就像我说的那样,我自己无法重现错误。
      • 也许它可能是intent null中的“channelName”。
      • 抱歉,我们不知道您实际检查的 Nullpointers 的那一小部分代码...
      猜你喜欢
      • 2019-11-01
      • 2016-05-18
      • 2019-07-01
      • 2011-02-12
      • 2011-11-27
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多