我已经为该网站创建了Android Webview。 未连接互联网时,我已经创建了自定义错误页面。 文件加载正常。 如果未连接互联网,则错误页面正在加载。 有什么方法可以在自定义错误页面中添加重试按钮,以便一旦连接了互联网并且用户单击重试按钮然后再次加载Webview即可? 现在,我必须退出应用程序,然后再次连接互联网后就必须再次打开该应用程序。 我要在自定义错误页面上具有重试按钮,而不退出应用程序,而是要在自定义错误页面上设置重试按钮,这样才能加载不退出应用程序的Webview。 还是一旦连接互联网就可以自动加载Webview?
MainActivity.java是
package com.flyingcolorz.flyingcolorz;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.app.Activity;
import android.view.KeyEvent;
import android.content.DialogInterface;
import android.app.AlertDialog;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.graphics.Bitmap;
import android.view.View;
import android.widget.ProgressBar;
import android.webkit.WebResourceRequest;
import android.content.Intent;
import android.net.Uri;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String url = "https://google.com/";
setContentView(R.layout.activity_main);
final WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.loadUrl(url);
//myWebView.setWebViewClient(new WebViewClient());
// Get Connectivity Manager class object from Systems Service
//ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// Get Network Info from connectivity Manager
//NetworkInfo networkInfo = cm.getActiveNetworkInfo();
// if no network is available networkInfo will be null
// otherwise check if we are connected
// if (networkInfo == null) {
myWebView.setWebViewClient(new WebViewClient() {
@Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
myWebView.loadUrl("file:///android_asset/error.html");
}
});
// }
}
//goto previous page
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
WebView myWebView = (WebView) findViewById(R.id.webview);
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (myWebView.canGoBack()) {
myWebView.goBack();
} else {
//finish();
new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Exit")
.setMessage("Are you sure you want to exit?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton("No", null)
.show();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
}
答案 0 :(得分:1)
您可以执行以下操作作为解决方案。
添加具有滑动刷新布局的网络视图。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.vvhvb.hesselfeenstra.vvheerenveenseboys.MainActivity"
tools:showIn="@layout/activity_main">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipeContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true" />
</android.support.v4.widget.NestedScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
并将错误消息显示为“发生了错误!从顶部滑动以重试。”
现在,当用户刷新时,将所需的默认URL加载到Web视图中。
mySwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
webview.loadUrl(url);
}
}
);
答案 1 :(得分:0)
您可能必须添加一些连接性触发器,一旦检测到连接性恢复,这些触发器将自动重新加载到原始URL。但是,我不知道是否有可能,或者如何做到这一点。
我遇到了完全相同的问题。这是我的处理方式(我不希望“刷卡刷新”):
我为错误页面(例如ErrorActivity
)创建了一个单独的活动,并像加载普通Web视图一样加载了error.html
页面。
因此,我将onReceivedError
更改为此:
@Override
public void onReceivedError(WebView webview, int i, String s, String s1)
{
WebView.setVisibility(View.GONE);
Intent intent = new Intent(MainActivity.this, ErrorActivity.class);
startActivity(intent);
finish();
}
基本上,此代码检测到已收到一些错误,然后隐藏原始的WebView
并使用ErrorActivity
启动Intent
,并完成{{1} }。
然后MainActivity
进入我的ErrorActivity
页面,告诉用户从error.html
重新加载页面。
现在,要创建menu button
,我们需要在ErrorActivity
中对其进行定义,为其创建一个布局文件,然后加载AndroidManifest.xml
。
如果您还没有WebView
,则必须在menu
内创建一个menu
文件夹。这种情况下的示例res
文件:
menu.xml
在<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/refresh"
android:icon="@drawable/ic_refresh_black_24dp"
android:orderInCategory="1"
app:showAsAction="always"
tools:ignore="AlwaysShowAction"
android:title="@string/refresh"/>
</menu>
之外的ErrorActivity.java
中,添加以下内容:
onCreate
基本上,一旦您按下@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.refresh:
Intent intent = new Intent(ErrorActivity.this, MainActivity.class);
startActivity(intent);
finish();
break;
}
return super.onOptionsItemSelected(item);
}
,您的应用就会尝试加载Refresh
。如果仍然存在某些Internet连接问题,您的MainActivity
将再次收到错误消息,并会再次加载MainActivity's WebView
。到目前为止,这对我来说是完美的。
这应该做到。
如果您要更改此代码以满足您的需要,请确保更新ID等。
答案 2 :(得分:0)
一名医学系学生在这里,试图解决您的问题。 只需在错误页面(error.html)中添加一个按钮即可。
<a href="https://www.google.com/" ><button>RETRY</button></a>
再见!
是时候来看病人了。