2011-11-03 84 views
0

我正在更新我的应用程序,现在我得到NullPointerException当我按下后退按钮。这是我的主要活动:返回按钮上的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为null,但为什么?

WebView mWebView; 
WebView mWebView = (WebView) findViewById(R.id.webview); 

改变这种(OOPS!):

WebView mWebView; 
mWebView = (WebView) findViewById(R.id.webview); 

回答

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); 
} 
+0

那么它的工作(显示页面),我已经通过页面,所以它应该能够回去? –

+0

测试它:)。 'if(mWebView!= null){mWebView.goBack(); }' – Ricky

+0

还需要在canGoBack之前测试 – FunkTheMonk

0

假设com.appinfluence.musicpromotion.WebViewActivity.onKeyDown是的onkeydown方法,你贴,mWebView为null因为某些原因。

0

检查以确保您的变量不为空。我无法确切知道它正在死于哪条线,但我假设它正在IF条件下获取“mWebView.canGoBack()”上的空指针。

0

包裹如果是这样的代码:

if(mWebView!=NULL){ your if } 

,看看会发生什么,如果没有什么比mWebView为空,也可以打印一些调试。