今日プロジェクトのウェブページをロードしたところ、ロードできなかったものが 1 つありました。えっと、以前のプロジェクトを確認したところ、複数の漏れがあることが判明したので、ここでまとめます。
1. 権限の構成: AndroidManifest.xml ファイルにネットワーク権限を必ず追加してください。
<uses-permission android:name="android.permission.INTERNET" />
2. WebView 設定: WebView の関連設定をチェックして、JavaScript が有効になっていて、リモート コンテンツをロードできることを確認します。
webView.settings.javaScriptEnabled = true
webView.settings.loadsImagesAutomatically = true
一部のプロジェクトはこれを事前に追加しなくても読み込むことができますが、追加しても問題ありません
3. エラーをリッスンします: WebViewClient を作成し、それを WebView に設定して、ページの読み込みとエラーを処理します。
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
// 页面加载完成后的处理
}
override fun onReceivedError(
view: WebView?,
errorCode: Int,
description: String?,
failingUrl: String?
) {
// 页面加载错误的处理
}
}
4. ネットワーク接続を確認します。デバイスがインターネットに正常に接続されており、ロードされた Web ページにアクセスできることを確認します。
Web リンクを確認する: 読み込まれた Web リンクが正しく、リダイレクトやアクセス制限がないことを確認します。
私のコード:
class PrivacyActivity : AppCompatActivity() {
private lateinit var webView: WebView
private lateinit var close: AppCompatImageView
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.layout_privacy)
ImmersionBar.with(this).fullScreen(false).navigationBarColor(R.color.transparent)
.statusBarColor(R.color.transparent).init()
webView = findViewById(R.id.icon_webview)
close = findViewById(R.id.icon_back)
webView.canGoBack()
webView.settings.javaScriptEnabled = true
webView.settings.loadsImagesAutomatically = true
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView?, request: WebResourceRequest?
): Boolean {
view?.loadUrl("https://blog.csdn.net/LoveFHM?type=blog")
return true
}
}
webView.loadUrl("https://blog.csdn.net/LoveFHM?type=blog")
close.setOnClickListener { finish() }
}
override fun onDestroy() {
webView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null)
webView.clearHistory()
(webView.parent as ViewGroup).removeView(webView)
webView.destroy()
super.onDestroy()
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack()
return true
}
return super.onKeyDown(keyCode, event);
}
}