后退按钮上的NullPointerException按

时间:2011-11-03 16:52:21

标签: android

我正在更新我的应用程序,现在我按下后退按钮时收到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);

4 个答案:

答案 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,会发生什么,也可以打印一些调试。