web-dev-qa-db-ja.com

Webviewエラーの検出とメッセージの表示

WebViewページのロード中にエラーが発生したときにエラーメッセージを表示したい(接続なし)。これは私がこれまでに持っているもので、エラー処理コードはありません:

public class TrackerPage extends Activity {

    // @Override
    private WebView webview;
    private ProgressDialog progressDialog;

    private boolean error;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Get rid of the Android title bar
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        // Set the XML layout
        setContentView(R.layout.tracker_page);

        // Bundle objectbundle = this.getIntent().getExtras();
        webview = (WebView) findViewById(R.id.tracker);

        final Activity activity = this;

        // Enable JavaScript and lets the browser go back
        webview.getSettings().setJavaScriptEnabled(true);
        webview.canGoBack();

        webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            public void onLoadResource(WebView view, String url) {
                // Check to see if there is a progress dialog
                if (progressDialog == null) {
                    // If no progress dialog, make one and set message
                    progressDialog = new ProgressDialog(activity);
                    progressDialog.setMessage("Loading please wait...");
                    progressDialog.show();

                    // Hide the webview while loading
                    webview.setEnabled(false);
                }
            }

            public void onPageFinished(WebView view, String url) {
                // Page is done loading;
                // hide the progress dialog and show the webview
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                    webview.setEnabled(true);
                }
            }

        });

        // The URL that webview is loading
        webview.loadUrl("http://url.org/");
    }
}

どうすればいいですか?

30
HighLife

上記のすべての回答は非推奨です。ページの終了後にこのコードを使用する必要があります

 @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error){
           //Your code to do
        Toast.makeText(getActivity(), "Your Internet Connection May not be active Or " + error , Toast.LENGTH_LONG).show();
    }
25
Harsh Mittal

あなたはそこにいる方法のほとんどです... onReceivedError を実装し、必要なエラーを処理するだけです。

28
kabuko

Onpagefinishedの後にこれを追加します。

    public void onReceivedError(WebView view, int errorCod,String description, String failingUrl) {
            Toast.makeText(Webform.this, "Your Internet Connection May not be active Or " + description , Toast.LENGTH_LONG).show();
        }

Android.widget.Toastをインポートすることを忘れないでください。

17
Yahyaotaif

API 23 Marshmallowに従って回答を更新

WebViewClientエラー処理

    /*
     * Added in API level 23 replacing :-
     *
     * onReceivedError(WebView view, int errorCode, String description, String failingUrl) 
    */
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request,
            WebResourceError error) {

        Toast.makeText(getActivity(),
                "WebView Error" + error.getDescription(),
                Toast.LENGTH_SHORT).show();

        super.onReceivedError(view, request, error);

    }

    /*
      Added in API level 23
    */
    @Override
    public void onReceivedHttpError(WebView view,
            WebResourceRequest request, WebResourceResponse errorResponse) {

        Toast.makeText(getActivity(),
                "WebView Error" + errorResponse.getReasonPhrase(),
                Toast.LENGTH_SHORT).show();


        super.onReceivedHttpError(view, request, errorResponse);
    }

ネットワークエラー処理

        webView.loadUrl(urlToLoad);

        if (!isConnected(getActivity())) {
            Toast.makeText(getActivity(), "You are offline ", Toast.LENGTH_SHORT).show();

        }

     /**
     * Check if there is any connectivity
     * 
     * @param context
     * @return is Device Connected
     */
    public static boolean isConnected(Context context) {

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

        if (null != cm) {
            NetworkInfo info = cm.getActiveNetworkInfo();

            return (info != null && info.isConnected());
        }
        return false;
    }
6
Hitesh Sahu
public class WebClient extends WebViewClient {

    @Override
    @TargetApi(Build.VERSION_CODES.M)
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        final Uri uri = request.getUrl();
        handleError(view, error.getErrorCode(), error.getDescription().toString(), uri);
    }

    @SuppressWarnings("deprecation")
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
        final Uri uri = Uri.parse(failingUrl);
        handleError(view, errorCode, description, uri);
    }

    private void handleError(WebView view, int errorCode, String description, final Uri uri) {
        final String Host = uri.getHost();// e.g. "google.com"
        final String scheme = uri.getScheme();// e.g. "https"
        // TODO: logic
    }
}
4
Vlad