网页提示java版本不可用_防止WebView显示“网页不可用”

问题

我有一个广泛使用WebView的应用程序。当此应用程序的用户没有Internet连接时,会出现"网页不可用"和其他各种文本的页面。有没有办法在我的WebView中不显示这个通用文本?我想提供自己的错误处理。

private final Activity activity = this;

private class MyWebViewClient extends WebViewClient

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

// I need to do something like this:

activity.webView.wipeOutThePage();

activity.myCustomErrorHandling();

Toast.makeText(activity, description, Toast.LENGTH_LONG).show();

}

}

#1 热门回答(88 赞)

首先用HTML创建自己的错误页面并将其放在你的资源文件夹中,我们称之为myerrorpage.html然后使用onReceivedError:

mWebView.setWebViewClient(new WebViewClient() {

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

mWebView.loadUrl("file:///android_asset/myerrorpage.html");

}

});

#2 热门回答(23 赞)

我发现的最佳解决方案是在OnReceivedError事件中加载一个空页面,如下所示:

@Override

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

super.onReceivedError(view, errorCode, description, failingUrl);

view.loadUrl("about:blank");

}

#3 热门回答(9 赞)

最后,我解决了这个问题。 (它一直工作到现在..)

我的解决方案是这样的......

准备布局以显示错误发生的时间而不是网页(脏页'未找到消息')布局有一个按钮,"RELOAD"带有一些指导消息。

如果发生错误,请记住使用布尔值并显示我们准备的布局。

如果用户单击"RELOAD"按钮,则将mbErrorOccured设置为false。并将mbReloadPressed设置为true。

如果mbErrorOccured为false且mbReloadPressed为true,则表示webview加载页面成功。 '如果再次发生错误,mbErrorOccured将在onReceivedError(...)上设置为true

这是我的完整资料来源。看一下这个。

public class MyWebViewActivity extends ActionBarActivity implements OnClickListener {

private final String TAG = MyWebViewActivity.class.getSimpleName();

private WebView mWebView = null;

private final String URL = "http://www.google.com";

private LinearLayout mlLayoutRequestError = null;

private Handler mhErrorLayoutHide = null;

private boolean mbErrorOccured = false;

private boolean mbReloadPressed = false;

@SuppressLint("SetJavaScriptEnabled")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_webview);

((Button) findViewById(R.id.btnRetry)).setOnClickListener(this);

mlLayoutRequestError = (LinearLayout) findViewById(R.id.lLayoutRequestError);

mhErrorLayoutHide = getErrorLayoutHideHandler();

mWebView = (WebView) findViewById(R.id.webviewMain);

mWebView.setWebViewClient(new MyWebViewClient());

WebSettings settings = mWebView.getSettings();

settings.setJavaScriptEnabled(true);

mWebView.setWebChromeClient(getChromeClient());

mWebView.loadUrl(URL);

}

@Override

public boolean onSupportNavigateUp() {

return super.onSupportNavigateUp();

}

@Override

public void onClick(View v) {

int id = v.getId();

if (id == R.id.btnRetry) {

if (!mbErrorOccured) {

return;

}

mbReloadPressed = true;

mWebView.reload();

mbErrorOccured = false;

}

}

@Override

public void onBackPressed() {

if (mWebView.canGoBack()) {

mWebView.goBack();

return;

}

else {

finish();

}

super.onBackPressed();

}

class MyWebViewClient extends WebViewClient {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

return super.shouldOverrideUrlLoading(view, url);

}

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

super.onPageStarted(view, url, favicon);

}

@Override

public void onLoadResource(WebView view, String url) {

super.onLoadResource(view, url);

}

@Override

public void onPageFinished(WebView view, String url) {

if (mbErrorOccured == false && mbReloadPressed) {

hideErrorLayout();

mbReloadPressed = false;

}

super.onPageFinished(view, url);

}

@Override

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

mbErrorOccured = true;

showErrorLayout();

super.onReceivedError(view, errorCode, description, failingUrl);

}

}

private WebChromeClient getChromeClient() {

final ProgressDialog progressDialog = new ProgressDialog(MyWebViewActivity.this);

progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

progressDialog.setCancelable(false);

return new WebChromeClient() {

@Override

public void onProgressChanged(WebView view, int newProgress) {

super.onProgressChanged(view, newProgress);

}

};

}

private void showErrorLayout() {

mlLayoutRequestError.setVisibility(View.VISIBLE);

}

private void hideErrorLayout() {

mhErrorLayoutHide.sendEmptyMessageDelayed(10000, 200);

}

private Handler getErrorLayoutHideHandler() {

return new Handler() {

@Override

public void handleMessage(Message msg) {

mlLayoutRequestError.setVisibility(View.GONE);

super.handleMessage(msg);

}

};

}

}

另外:这是布局....

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/rLayoutWithWebView"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/webviewMain"

android:layout_width="match_parent"

android:layout_height="match_parent" />

android:id="@+id/lLayoutRequestError"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_centerInParent="true"

android:background="@color/white"

android:gravity="center"

android:orientation="vertical"

android:visibility="gone" >

android:id="@+id/btnRetry"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="center"

android:minWidth="120dp"

android:text="RELOAD"

android:textSize="20dp"

android:textStyle="bold" />

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值