哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
在Android中,WebView
加载页面时可能会因网络问题或页面本身的问题导致超时。为了处理加载超时的情况,我们可以通过以下方法来优雅地应对。
WebViewClient
的 onReceivedError
和 onPageFinished
方法捕获加载错误和完成事件。Handler
和 Runnable
来设置超时时间。在 WebView
中启用必要的配置:
webView.getSettings().setJavaScriptEnabled(true); // 启用JavaScript
webView.getSettings().setDomStorageEnabled(true); // 启用DOM存储
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); // 禁用缓存
通过重写 WebViewClient
的 onReceivedError
方法捕获加载失败的情况。
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
// 显示错误页面
webView.loadUrl("file:///android_asset/error.html");
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 页面加载完成后,取消超时处理
handler.removeCallbacks(timeoutRunnable);
}
});
使用 Handler
和 Runnable
来设置加载超时逻辑。
Handler handler = new Handler();
Runnable timeoutRunnable = new Runnable() {
@Override
public void run() {
if (webView.getProgress() < 100) { // 判断是否未加载完成
webView.stopLoading(); // 停止加载
webView.loadUrl("file:///android_asset/timeout.html"); // 显示超时页面
}
}
};
在加载网页时,启动超时逻辑:
String url = "https://example.com";
webView.loadUrl(url);
// 设置超时时间为 10 秒
handler.postDelayed(timeoutRunnable, 10000);
在页面加载完成时,取消超时任务:
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
handler.removeCallbacks(timeoutRunnable); // 移除超时任务
}
创建一个简单的HTML文件来显示错误信息,例如:
assets/error.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Error</title>
</head>
<body>
<h1>页面加载失败</h1>
<p>请检查您的网络连接,然后重试。</p>
<button onclick="window.location.reload()">重试</button>
</body>
</html>
assets/timeout.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Timeout</title>
</head>
<body>
<h1>页面加载超时</h1>
<p>网络响应超时,请稍后再试。</p>
<button onclick="window.location.reload()">重试</button>
</body>
</html>
完整的Activity代码如下:
public class WebViewActivity extends AppCompatActivity {
private WebView webView;
private Handler handler = new Handler();
private Runnable timeoutRunnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
webView.loadUrl("file:///android_asset/error.html");
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
handler.removeCallbacks(timeoutRunnable);
}
});
String url = "https://example.com";
webView.loadUrl(url);
// 设置超时时间为 10 秒
timeoutRunnable = new Runnable() {
@Override
public void run() {
if (webView.getProgress() < 100) {
webView.stopLoading();
webView.loadUrl("file:///android_asset/timeout.html");
}
}
};
handler.postDelayed(timeoutRunnable, 10000);
}
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeCallbacks(timeoutRunnable); // 清理资源
}
}
ConnectivityManager
),提前判断是否有网络。通过以上方法,我们能够优雅地处理WebView
加载页面的超时问题,同时为用户提供了更加友好的提示和交互。正确的超时处理不仅能提升用户体验,还可以提高应用的健壮性。
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
... ...
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
***
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。