我正在更新我的应用程序,现在我按下后退按钮时收到NullPointerException。这是我的主要活动:
image http://www.appinfluence.com/wp-content/uploads/2011/11/screenshot1.png image2 http://www.appinfluence.com/wp-content/uploads/2011/11/screenshot2.png
单击音乐时,我的第二个活动已启动,并且其中嵌入了一个webview。我在让后退按钮正常工作时遇到问题。我希望它能在浏览器中返回到第一页然后再回到第一个活动,直到它再也无法返回。这是我的代码和日志文件。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
11-03 16:41:14.386: W/dalvikvm(282): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-03 16:41:14.486: E/AndroidRuntime(282): FATAL EXCEPTION: main
11-03 16:41:14.486: E/AndroidRuntime(282): java.lang.NullPointerException
11-03 16:41:14.486: E/AndroidRuntime(282): at com.appinfluence.musicpromotion.WebViewActivity.onKeyDown(WebViewActivity.java:315)
11-03 16:41:14.486: E/AndroidRuntime(282): at android.view.KeyEvent.dispatch(KeyEvent.java:1037)
11-03 16:41:14.486: E/AndroidRuntime(282): at android.app.Activity.dispatchKeyEvent(Activity.java:2068)
11-03 16:41:14.486: E/AndroidRuntime(282): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:16 43)
11-03 16:41:14.486: E/AndroidRuntime(282): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471)
11-03 16:41:14.486: E/AndroidRuntime(282): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441)
11-03 16:41:14.486: E/AndroidRuntime(282): at android.view.ViewRoot.handleMessage(ViewRoot.java:1735)
11-03 16:41:14.486: E/AndroidRuntime(282): at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 16:41:14.486: E/AndroidRuntime(282): at android.os.Looper.loop(Looper.java:123)
11-03 16:41:14.486: E/AndroidRuntime(282): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-03 16:41:14.486: E/AndroidRuntime(282): at java.lang.reflect.Method.invokeNative(Native Method)
11-03 16:41:14.486: E/AndroidRuntime(282): at java.lang.reflect.Method.invoke(Method.java:521)
11-03 16:41:14.486: E/AndroidRuntime(282): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-03 16:41:14.486: E/AndroidRuntime(282): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-03 16:41:14.486: E/AndroidRuntime(282): at dalvik.system.NativeStart.main(Native Method)
你们是对的我的网页视图是空的,但是为什么?
WebView mWebView;
WebView mWebView = (WebView) findViewById(R.id.webview);
改为此(OOPS!):
WebView mWebView;
mWebView = (WebView) findViewById(R.id.webview);
答案 0 :(得分:1)
我猜你的mWebView
是空的。在调用此方法时,您是否已确定已初始化?您可以尝试在调用mWebView.canGoBack()
之前进行快速测试并将结果打印到日志中,如下所示:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(mWebView == null){
log.d("My Tag", "Webview is null on KeyCode: " + String.valueOf(keyCode));
}
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
答案 1 :(得分:0)
假设com.appinfluence.musicpromotion.WebViewActivity.onKeyDown是您发布的onKeyDown方法,mWebView由于某种原因为空。
答案 2 :(得分:0)
检查以确保您的变量不为空。我无法确切地知道它在哪个行上死亡,但我假设它在IF条件下获得了“mWebView.canGoBack()”的空指针。
答案 3 :(得分:0)
将if代码包装成这样的代码:
if(mWebView!=NULL){ your if }
看看如果没有mWebView为null,会发生什么,也可以打印一些调试。