2011-11-20 45 views
1

随时按下后退键,我的应用程序崩溃。我尝试过不同的方式,并且他们都崩溃抛出NullPointerException ....任何想法?Android后退键错误

方式1:

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the BACK key and if there's history 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { 
     myWebView.goBack(); 
     return true; 
    } 
    // If it wasn't the BACK key or there's no web page history, bubble up to the default 
    // system behavior (probably exit the activity) 
    return super.onKeyDown(keyCode, event); 
} 

方式2:

public void onBackPressed() { 
     myWebView.goBack(); 
     return; 
} 

堆栈跟踪:

11-19 20:13:12.425: E/AndroidRuntime(1963): FATAL EXCEPTION: main 
11-19 20:13:12.425: E/AndroidRuntime(1963): java.lang.NullPointerException 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at com.meanwhileinwv.android.MNWVShow.onBackPressed(MNWVShow.java:27) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at android.app.Activity.onKeyUp(Activity.java:1983) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at android.view.KeyEvent.dispatch(KeyEvent.java:1518) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at android.app.Activity.dispatchKeyEvent(Activity.java:2163) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1747) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2702) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2677) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1965) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at android.os.Looper.loop(Looper.java:143) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at android.app.ActivityThread.main(ActivityThread.java:4263) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at java.lang.reflect.Method.invoke(Method.java:507) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
11-19 20:13:12.425: E/AndroidRuntime(1963):  at dalvik.system.NativeStart.main(Native Method) 
+1

你能从崩溃中发布堆栈跟踪吗? NullPointerException发生在哪一行? – goto10

+0

我添加了堆栈跟踪 – comead

回答

2

当您调用myWebView.goBack()时,获取您共享的代码获取堆栈跟踪的唯一方法是myWebViewnull。为了证明这一点,请修改您的onBackPressed()

public void onBackPressed() { 
    if (myWebView != null) { 
     myWebView.goBack(); 
    } 
} 

例外情况应该消失。 (虽然,很明显,你仍然不会得到任何回来的行为发生。)

可能的原因:

  • myWebView是不是在你的类的成员变量。您可能已经声明并将其设置为另一种方法,这意味着它不在onBackPressed的范围内。
  • myWebView是不变量的实际名称是指你的WebView
  • myWebView用来指你的WebView但在某些时候被设置为null再次
  • ,你认为是指向myWebView的代码你WebView实际上设置为null。例如,findViewById调用实际上找不到WebView,因为您指定了错误的ID将返回null

如果你还在坚持,其中后myWebView声明,并在那里被分配的代码。

1

在该代码的唯一公共点是myWebView。你确定它不是null?

+0

myWebView正在显示一个站点,所以它不为空。它在一个类似的Activity中工作。 – comead

+0

WebView本身可以正常工作,但活动对它的引用仍可能为空。您是否通过设置断点来验证内容? –

+0

我将如何去验证内容? – comead