Android 按下后退导航键时 Webview 应用强制关闭
Android Webview app force closes while pressing the back navigation key
这是我的 MainActivity 代码,在应用程序中浏览时没有问题,它几乎加载了我网站的所有内容,但按下后退按钮会导致我的应用程序立即崩溃。看看我的代码。还有一件事是我无法加载水平进度条。假设我的 activity_main.xml 已设置 android:id="@+id/progressBar2" 进度条 ID,现在请在下面提到的评论部分为其添加 java 代码。
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
public class MainActivity extends AppCompatActivity {
private AdView mAdView;
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting progress horizontal progress bar
//adding admob monetization
MobileAds.initialize(this,
"ca-app-pub-8084091883486704/3115574815");
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new clienthandle());
webView.loadUrl("https://www.google.com");
}
//should load the page within webview, skipping default web browser
public class clienthandle extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl("https://www.google.com");
return true;
}
}
//initiate navigation
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && this.webView.canGoBack()) {
this.webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
在您的 onCreate
中,您正在初始化 webView 的本地实例。然后,在您的 onKeyDown
中,您试图在 class 成员 WebView webView;
之上工作 - 我相信它从未被初始化,因此 NPE。
这是我的 MainActivity 代码,在应用程序中浏览时没有问题,它几乎加载了我网站的所有内容,但按下后退按钮会导致我的应用程序立即崩溃。看看我的代码。还有一件事是我无法加载水平进度条。假设我的 activity_main.xml 已设置 android:id="@+id/progressBar2" 进度条 ID,现在请在下面提到的评论部分为其添加 java 代码。
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
public class MainActivity extends AppCompatActivity {
private AdView mAdView;
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting progress horizontal progress bar
//adding admob monetization
MobileAds.initialize(this,
"ca-app-pub-8084091883486704/3115574815");
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new clienthandle());
webView.loadUrl("https://www.google.com");
}
//should load the page within webview, skipping default web browser
public class clienthandle extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl("https://www.google.com");
return true;
}
}
//initiate navigation
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && this.webView.canGoBack()) {
this.webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
在您的 onCreate
中,您正在初始化 webView 的本地实例。然后,在您的 onKeyDown
中,您试图在 class 成员 WebView webView;
之上工作 - 我相信它从未被初始化,因此 NPE。