是什么导致了这个NullpointerException?

时间:2011-12-16 23:36:01

标签: android nullpointerexception

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

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,但我对此非常不确定,特别是因为我看不到网址为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"));

奇怪的是,市场的崩溃报告没有提到我的代码 - 没有什么事情 - 你正在查看上面的完整日志。毫无疑问,它是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);

3 个答案:

答案 0 :(得分:7)

以下是PluginFullScreenHolder.java source code for android 4.0

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

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

web.setWebChromeClient(new WebChromeClient());

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

答案 1 :(得分:0)

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

android.app.Dialog
方法show()中的

您可能需要查看source code

答案 2 :(得分:0)

您是否尝试初始化“网络”?

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

如果你声明你的变量

private WebView web;

您将获得NullpointerExeption,您必须初始化该对象。