[英]onKeyDown method crashing app
I have the following code that is working but when I hit the hardware back button the app crashes, 我有下面的代码正在运行,但是当我按下硬件后退按钮时,应用崩溃了,
package com.fnesse.tmpmobile;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
@SuppressWarnings("unused")
public class TmpmobileActivity extends Activity
{
WebView webView;
final Activity activity = this;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
WebView webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setBackgroundColor(0x00000000);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress)
{
activity.setTitle("Loading...");
activity.setProgress(progress * 100);
if(progress == 100)
activity.setTitle(R.string.app_name);
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
//Error Code Here
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
});
webView.loadUrl("http://www.themorningtonpeninsula.com");
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
I found somewhere that I needed to add, 我发现需要添加的地方,
WebView webView;
Above the onCeate method, which allowed webView to resolve. 在onCeate方法上方,该方法允许webView解析。 So now I get no errors but it crashes and the app runs on my phone but crashes when I hit the hardware back button. 因此,现在我没有任何错误,但是它崩溃了,该应用程序在手机上运行,但是当我按下硬件后退按钮时崩溃了。
Does anyone know why that would be happening? 有谁知道为什么会这样?
Cheers, 干杯,
Mike. 麦克风。
I'll try to do my magic guest on the error message. 我将尝试对错误消息进行魔术处理。 I think, this error is caused by the way to initialize webView
variable. 我认为,此错误是由初始化webView
变量的方式引起的。 You see, on the class level, you declare: 您会看到,在类级别上,您声明:
WebView webView;
And then, on onCreate()
you initialize webView
and also redeclare it again: 然后,在onCreate()
初始化webView
并再次重新声明:
WebView webView = (WebView) findViewById(R.id.webview);
But, this redeclare step resulted in class level webView
to be uninitialized. 但是,此重新声明步骤导致未初始化类级别的webView
。
To fix it, try to change this line: 要解决此问题,请尝试更改此行:
WebView webView = (WebView) findViewById(R.id.webview);
Into: 成:
webView = (WebView) findViewById(R.id.webview);
And you should now have class level webView
initialized and ready for use in whatever method you have. 现在,您应该已经初始化了类级别的webView
并可以在任何方法中使用。
Here's few resources explaining Java variable scope: 以下是一些解释Java变量范围的资源:
You are creating a new Webview in your onCreate() method instead of the Class field Webview. 您正在使用onCreate()方法而不是Class字段Webview创建新的Webview。 Change 更改
WebView webView = (WebView) findViewById(R.id.webview);
into: 成:
webView = (WebView) findViewById(R.id.webview);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.