有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android WebView后退按钮导致强制关闭

这是我的程序代码。我不熟悉Android和Java,所以它可能看起来很混乱。当我在添加代码后按下后退按钮时,我得到一个强制关闭

    package com.alexriggs.安卓.gansterstreetwars;

import 安卓.app.Activity;
import 安卓.content.Intent;
import 安卓.net.Uri;
import 安卓.os.Bundle;
import 安卓.view.KeyEvent;
import 安卓.webkit.WebView;
import 安卓.webkit.WebViewClient;

public class GangsterStreetWarsActivity extends Activity {
    /** Called when the activity is first created. */
    final Activity activity = this;
    WebView myWebView;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        WebView myWebView = (WebView) findViewById(R.id.webview);
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.setWebViewClient(new MyWebViewClient());
        myWebView.getSettings().setBuiltInZoomControls(true);
        myWebView.getSettings().setLoadWithOverviewMode(true);
        myWebView.getSettings().setUseWideViewPort(true);
        myWebView.loadUrl("http://mafia.itwontwork.net/?pk_campaign=Android&pk_kwd=MainApp");
    }
    private class MyWebViewClient extends WebViewClient {


        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getHost().equals("mafia.itwontwork.net")) {
                // Designate Urls that you want to load in WebView still.
                return false;
            }           
            // Otherwise, give the default behavior (open in browser)
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }
        }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
        myWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
    }
}

错误的日志如下:http://itwontwork.net/logcat/1.txt

我把它缩小到了“myWebView.goBack();”这一行。即使我去掉所有的“如果”,只留下那条线,它仍然不起作用

我从Here那里得到了后退按钮代码,它对18个人有效。但不是我:(


共 (2) 个答案

  1. # 1 楼答案

    在代码中写入以下行

    1)  myWebView = (WebView) findViewById(R.id.webview);
    
    2)  @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                myWebView.goBack();
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    

    而不是

    1)  WebView myWebView = (WebView) findViewById(R.id.webview);
    
    2)  @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
                myWebView.goBack();
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    
  2. # 2 楼答案

    问题是,在myWebView成员变量中,实际上没有WebView的实例,只有在onCreate方法中的局部变量中。(这就是为什么在代码运行时会有一个NullPointerException,而myWebView从未初始化过。)

    你可以通过改变线路来解决它

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

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

    onCreate。(我还没有检查其他错误,但这应该可以解决您的问题。)