0
나는 웹보기 위해 다음과 같은 시나리오를 가지고안드로이드 WebView의 네트워크 연결 해제 후 비어
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view_tutorial);
mWebView = (WebView) findViewById(R.id.webView1);
mWebView.setWebViewClient(mWebViewClient);
mWebView.setInitialScale(0);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.requestFocusFromTouch();
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
Button btnGo = (Button) findViewById(R.id.button1);
btnGo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String url = "http://www.google.com";// here goes my server url with https://...... for authentication
showProgressDialog("Loading");
mWebView.loadUrl(url);
}
});
}
private void showProgressDialog(String title) {
if(mProgress == null || !mProgress.isShowing()){
mProgress = ProgressDialog.show(this, title, "Please wait...", true,
true, new OnCancelListener() {
public void onCancel(DialogInterface pd) {
finishActivity();
}
});
mProgress.setCanceledOnTouchOutside(false);
mProgress.setCancelable(true);
}
}
private void finishActivity() {
if(mWebView!=null){
finish();
}
}
private final WebViewClient mWebViewClient = new WebViewClient() {
public void onPageStarted(WebView view, String url,
android.graphics.Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d("test", "page started");
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("test", "page should override called");
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
if (mIsLoadingSigninPage) {
mIsLoadingSigninPage = false;
dismissProgressDialog();
}
Log.d("test", "page finished");
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
mIsLoadingSigninPage = false;
dismissProgressDialog();
Log.d("test", "page error received");
super.onReceivedError(view, errorCode, description, failingUrl);
finishActivity();
}
};
private void dismissProgressDialog() {
if (mProgress != null && mProgress.isShowing()) {
mProgress.dismiss();
mProgress =null;
}
}
//이, 좋아
03-07 07:31:20.977: D/test(1431): page started
03-07 07:31:22.788: D/test(1431): page should override called
03-07 07:31:22.887: D/test(1431): page started
03-07 07:31:24.496: D/test(1431): page finished
아래 지점 3 로그 고양이
- 네트워크를 사용할 수 없습니다.이 코드를 실행했는데 webviewclient의 onReceivedError가 호출되었습니다.
- 네트워크 사용 가능 및 페이지로드가 시작되고 네트워크 연결이 끊어지면 onReceivedError가 호출됩니다.
- 그러나 시간의 일부 인스턴스 mWebView.loadUrl (URL)가 호출된다 (에뮬레이터 F8로 버튼을 분리 네트워크를 누른 후 1,2,3 카운트)가, webViewclient의 방법처럼 호출되는 아래
및 WebView는 빈 흰색 화면을 표시하고 onReceivedError는 호출되지 않습니다. 여기
및
이 코드를 잘못 무엇- 로그 캣입니다.
- 왜 onReceivedError가 호출되지 않습니다. 가 호출되지 않는 경우, 어떻게 웹보기를 알 수있는 방법
- 이 anyting 마무리 작업을로드하지 않은이 상황을 처리하는 것이 확실히 페이지를 호출합니다
을 확인해야합니다. 그러나 제가 검색 한 것처럼 WebView에서 상태를 확인할 수있는 방법이 있습니다. 그 방법/해결책은 없습니다. – Baba
예, http 상태를 확인하고이를 참조하고 둘 다 읽으면 해결책을 얻을 수 있습니다. http://en.wikipedia.org/wiki/List_of_HTTP_status_codes http://stackoverflow.com/questions/11889020/get-http-status-code-in-android-webview – maddy
지금은 onPageFinished (..)에서 인터넷 체크인을 추가하고 finishActivity를 호출했습니다. – Baba