Java 后退按钮触发意外停止

Java 后退按钮触发意外停止,java,android,eclipse,Java,Android,Eclipse,当按下后退按钮时,我很难让下面的应用程序不显示错误。我只想让网站加载一个网页,并按“后退”按钮正常运行。有人看到这里有什么不对劲吗?LogCat没有显示错误,使用模拟器它不会中断,但在我的平板电脑上它总是中断 MyWebViewClient.java package com.MySite; import android.webkit.WebView; import android.webkit.WebViewClient; public class MyWebViewClient exten

当按下后退按钮时,我很难让下面的应用程序不显示错误。我只想让网站加载一个网页,并按“后退”按钮正常运行。有人看到这里有什么不对劲吗?LogCat没有显示错误,使用模拟器它不会中断,但在我的平板电脑上它总是中断

MyWebViewClient.java

package com.MySite;

import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
package com.mysite;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;

public class MySite extends Activity {
    WebView DCWebView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //init webview
        WebView DCWebView = (WebView) findViewById(R.id.webview);
        DCWebView.getSettings().setJavaScriptEnabled(true);
        DCWebView.loadUrl("http://mobile.mysite.com");

        //when a link is clicked, use the WebView instead of opening a new browser
        DCWebView.setWebViewClient(new MyWebViewClient());
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && DCWebView.canGoBack()) {
            DCWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}
MySite.java

package com.MySite;

import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
package com.mysite;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;

public class MySite extends Activity {
    WebView DCWebView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //init webview
        WebView DCWebView = (WebView) findViewById(R.id.webview);
        DCWebView.getSettings().setJavaScriptEnabled(true);
        DCWebView.loadUrl("http://mobile.mysite.com");

        //when a link is clicked, use the WebView instead of opening a new browser
        DCWebView.setWebViewClient(new MyWebViewClient());
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && DCWebView.canGoBack()) {
            DCWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

当你回击平板电脑时,会出现什么错误?您是否尝试过重写onBackPressed而不是onKeyDown?

您正在
onCreate()的内部声明一个名为
DCWebView
的局部变量。换线

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


然后,当按下后退键时,将出现一个后退堆栈(当您调用
DCWebView.canGoBack()
,当前为false,因为您的全局
DCWebView
从未初始化),后退按钮将按您期望的方式处理。

我是否应该把
this.finish()放进去
在onBackPressed中?如果希望活动关闭并返回到前一个活动(无论从何处启动DealClippings),则调用finish()应该可以,是的。onBackPressed的默认功能是执行finish(),因此,在我自己的应用程序中定义它不会起任何作用:-\n当用户点击“后退”按钮时,您能否澄清所需的功能是什么?另外,您是否能够将平板电脑连接到计算机,并检查DDMS中的Logcat以查看它记录的错误?您是说,将
WebView
放在那里,我将其定义为全局的?当您在方法中声明
DCWebView
时,为了回答您的第一条评论,它覆盖了同名的全局变量。因此,这是您在方法内部使用的
DCWebView
,而不是您打算使用的方法。