2014-01-24 39 views
3

我在按下後退鍵在本網站上離開遊戲時遇到問題。我在後退鍵上收到強制錯誤消息。我使用了我從第一個問題中學到的破壞代碼。沒有改變任何東西。有任何想法嗎?在後退鍵上獲得強制關閉錯誤

public class MainActivity extends Activity { 

WebView myWebView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    WebView myWebView = (WebView) findViewById(R.id.webView1); 
    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

    myWebView.getSettings().setDomStorageEnabled(true); 
    myWebView.getSettings().setJavaScriptEnabled(true); 

    myWebView.loadUrl("http://www.limejs.com/static/roundball/index.html"); 

} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the Back button and if there's history 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { 
     myWebView.goBack(); 
     finish(); 
     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); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    myWebView.destroy(); 
} 

}

Here is the Logcat: 

FATAL EXCEPTION: main 
java.lang.NullPointerException 
at com.example.roundball.MainActivity.onKeyDown(MainActivity.java:33) 
at android.view.KeyEvent.dispatch(KeyEvent.java:1256) 
at android.app.Activity.dispatchKeyEvent(Activity.java:2078) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent 
(PhoneWindow.java:1771) 
at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2563) 
at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2538) 
at android.view.ViewRoot.handleMessage(ViewRoot.java:1870) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3683)`enter code here` 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891) 
at dalvik.system.NativeStart.main(Native Method) 

I have used this code before to load web sites, it is just particular to this game? 
+0

顯示日誌,這就是我們如何看到問題所在。 –

回答

1

我會刪除返回真;完成後();

如果你有一些adb日誌來顯示你正在得到的確切的錯誤,這將有所幫助。

您還可以檢查myWebView是否爲空。我想這也可能是空的。

+0

我刪除了返回true;相同的結果。我已經使用此代碼訪問網站並返回鍵沒有問題。這是一個遊戲網站。正在做一些我不知道的奇怪事情。我已經進入了Logcat。謝謝 – flb2

+0

你可以驗證你的onKeyDown方法中「myWebView」不爲null .. – reidisaki

0

將您的代碼更改爲下面給出的代碼..基本上..我更新了您的調用完成()MainActivity.this.finish(),其中MainActivity是您的活動!所以,您必須將MainActivity更改爲您提供的任何名稱。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the Back button and if there's history 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { 
     myWebView.goBack(); 
     MainActivity.this.finish(); 
     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); 
} 
+0

我將你的代碼行添加到MainActivity文件中,結果相同。除了致命的異常錯誤之外,我不確定發生了什麼。奇怪的是,MainActivity進入一個網站並且沒有問題退出。奇怪??? – flb2

+0

我做的和你想要的非常相似...順便說一句,你爲什麼需要myWebView.destroy();? – thestar

+0

你可能只需要super.onDestroy();本身..而不是刪除你的myWebView.destroy()... – thestar

0
//replace for this 

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // Check if the key event was the Back button and if there's history 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { 
      myWebView.goBack(); 
      return true; 
     } 
       if (keyCode != KeyEvent.KEYCODE_BACK){ 
        return MainActivity.onKeyDown(keyCode, event); 
       }else{ 
        myWebView.destroy(); 
        MainActivity.finish(); 
        return false; 
       } 
    } 
1

你的日誌說:

在 com.example.roundball.MainActivity.onKeyDown(MainActivity.java:33)顯示java.lang.NullPointerException

這意味着在執行時onKeyDown方法內的代碼中有一個空引用。你只能在那裏使用2個引用,但是由於它不太可能會收到一個空的KeyEvent(它來自Android運行時,並且文檔隱含地說,當onKeyDown被調用時你總是收到一個有效的引用),它必須是對你的webview的引用。因此,在調用myWebView方法之前檢查myWebView!= null是否如此。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the Back button and if there's history 
    if(myWebView != null) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { 
      myWebView.goBack(); 
      finish(); 
      return true; 
     } 
    } else { 
     android.util.Log.w("MyActivity", "myWebView is null!!"); 
    } 
    // 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); 
} 

從這個代碼,我不能告訴是什麼原因造成你有一個空引用web視圖,但它可能會告訴你在哪裏旁邊查找問題,如果你希望你的WebView參考不空。