/ / Ako sa dostať späť obnoviť webový pohľad po. Aroid, webview, obnoviť

Ako sa dostať späť obnoviť webový pohľad na. Aroid, webview, obnoviť

Rozvíjam malú aplikáciu, na ktorú volám webovú stránku.

Prepisujem WebViewClient, pretože chcem otvoriť webovú stránku v rovnakom zobrazení.

Mojim problémom je, ak nastane problém (prerušenie internetového pripojenia alebo odpojenie servera), potom zobrazujem vlastnú chybovú stránku.

Ale keď je internet pripojený, zobrazí sa rovnaká chybová stránka, nie je obnovená webová stránka.

Tu je môj kód: Webweb otázka; Otázka reťazca;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DetectConnection detectConnection = new DetectConnection(getApplicationContext());
ActionBar bar = getActionBar();

// for color
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#5b5959")));
questionweb = (WebView) findViewById(R.id.webView1);
if (!DetectConnection.checkInternetConnection(this)) {
Toast.makeText(getApplicationContext(), "No Internet!", Toast.LENGTH_SHORT).show();
AlertDialog alertDialog = new AlertDialog.Builder(
MainActivity.this).create();

// Setting Dialog Title
alertDialog.setTitle("Internet Connection");

// Setting Dialog Message
alertDialog.setMessage("Please Check Internet Connection");

// Setting OK Button
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Write your code here to execute after dialog closed
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
MainActivity.this.startActivity(intent);
}
});

// Showing Alert Message
alertDialog.show();

} else {

questionweb.getSettings().setJavaScriptEnabled(true);

// loads the WebView completely zoomed out
questionweb.getSettings().setLoadWithOverviewMode(true);


questionweb.getSettings().setUseWideViewPort(true);

// override the web client to open all links in the same webview
questionweb.setWebViewClient(new MyWebViewClient());
questionweb.setWebChromeClient(new MyWebChromeClient());


questionweb.addJavascriptInterface(new JavaScriptInterface(this),
"Android");

// load the home page URL
questionweb.loadUrl("http://10.2.1.119:8081/OnlineExamV2/login/loginpage");

}
// I am calling this to refresh the webpage
questionweb.loadUrl("javascript:window.location.reload( true )" );

}

private class MyWebViewClient extends WebViewClient {

@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
hideErrorPage(view);
}

private void hideErrorPage(WebView view) {

String customErrorPageHtml = "<html><body><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">"
+ "<tr>"
+ "<td><div align="center"><font color="red" size="22pt">Sorry! Something went wrong</font></div></td>"
+ "</tr>" + "</table><html><body>";
view.loadData(customErrorPageHtml, "text/html", null);
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
questionweb.loadUrl(url);
//questionweb.loadUrl("http://10.2.1.119:8081/OnlineExamV2/login/loginpage");

questionweb.clearHistory();
return true;
}



}

private class MyWebChromeClient extends WebChromeClient {

// display alert message in Web View
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
Log.d("Web", message);
new AlertDialog.Builder(view.getContext()).setMessage(message)
.setCancelable(true).show();
result.confirm();
return true;
}



}

Ako získať obnovenú webovú stránku Keď je internet späť.

odpovede:

1 pre odpoveď č. 1

Možno môžete dať vlastnú triedu BroadcastReceiver výstrel.

Vyskúšajte to takto (úplne netestované):

1.) Trieda GlobalState:

public GlobalState {

public static boolean isOnline = true;
public static String lastUrl = "";
}

2.) Uložte svoju poslednú adresu URL a stav pripojenia v systéme onReceivedError:

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

super.onReceivedError(view, errorCode, description, failingUrl);
GlobalState.isOnline = false;
GlobalState.lastUrl = failingUrl;

hideErrorPage(view);
}

3.) Implementujte spätné volanie vo vašej triede aktivít (neviem meno, preto som ho nazval MainActivity.java):

public class MainActivity extends Activity implements IConnectionCallback {

private ConnectionBroadReceiver cbr = null;


@Override
protected void onCreate(Bundle savedInstanceState) {

//some code...
cbr = new ConnectionBroadReceiver (this);
registerReceiver(cbr, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
//some more code...
}

//this method will be triggered by ConnectionBroadCastReceiver
@Override
public void reload() {

//now reload your webview:
questionweb.loadUrl(GlobalState.lastUrl);
}
}

4.) Definujte spätné volanie rozhrania:

public interface IConnectionCallback {

public void reload();
}

5.) V neposlednom rade trieda ConnectionBroadReceiver:

public class ConnectionBroadReceiver extends BroadcastReceiver {

private IConnectionCallback callback = null;

public ConnectionBroadReceiver (IConnectionCallback callback) {

this.callback = callback;

}

@Override
public void onReceive(Context context, Intent intent) {

ConnectivityManager cm = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo netInfo = cm.getActiveNetworkInfo();

// lets check the connection
if (netInfo != null && netInfo.isConnectedOrConnecting()) {

//when last state was the offline state (GlobalState.isOnline== false),
//lets trigger the callback
if (GlobalState.isOnline == false) {

callback.reload();
}
GlobalState.isOnline = true;
} else {

GlobalState.isOnline = false;
}

}