2016-03-23 15 views
0

これは私のWebViewのコードです。 WebViewは正しく動作しますが、戻るボタンを押すと問題が発生します。アプリが終了します。Androidウェブビューは、戻るボタンを押したときに終了します

@Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     //enable layout 
     setContentView(R.layout.activity_main); 

     //create istance webview 
     WebView myWebView = (WebView) findViewById(R.id.webview); 

     //initialize webview's settings 
     WebSettings webSettings = myWebView.getSettings(); 

     //enable javascript 
     webSettings.setJavaScriptEnabled(true); 

     //load image 
     webSettings.setLoadsImagesAutomatically(true); 

     //inizialize client 
     MyWebViewClient myWebViewClient = new MyWebViewClient(); 

     //set webview to client 
     myWebView.setWebViewClient(myWebViewClient); 

     //load website by URL 
     myWebView.loadUrl(website_url); 

     this.onStart(); 
    } 
    @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 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); 
    } 
} 

CrashLog

03-23 14:43:18.530 14051-14051/com.quogito.quogito W/UnimplementedWebViewApi: Unimplemented WebView method onKeyDown called from: android.webkit.WebView.onKeyDown(WebView.java:2319) 
03-23 14:43:18.620 14051-14051/com.quogito.quogito E/InputEventSender: Exception dispatching finished signal. 
03-23 14:43:18.620 14051-14051/com.quogito.quogito E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 
03-23 14:43:18.620 14051-14051/com.quogito.quogito E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.webkit.WebView.canGoBack()' on a null object reference 
at com.quogito.quogito.MainActivity.onBackPressed(MainActivity.java:113) 
at android.app.Activity.onKeyUp(Activity.java:2497) 

答えて

0

あなたはこのラインでonCreateメソッド内でごmyWebViewオブジェクトをシャドウイングしている:

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

myWebViewと呼ばれるグローバル変数は決してないことを意味セット。

変更するには、この代わりにonCreate内側の線は:

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

それが正常に動作する必要があります。

+0

を試してみてはありがとうございました。あなたは別の問題(スワイプでページをリフレッシュする)を解決する手伝いをします。実行されない前に –

0

この

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (event.getAction() == KeyEvent.ACTION_DOWN) { 
     switch (keyCode) { 
      case KeyEvent.KEYCODE_BACK: 
       if (mWebView.canGoBack()) { 
        mWebView.goBack(); 
       } else { 
        finish(); 
       } 
       return true; 
     } 

    } 
    return super.onKeyDown(keyCode, event); 
}