在没有可用连接时显示Toast错误并阻止显示Webview

时间:2019-03-14 09:58:48

标签: java android android-fragments

当没有可用的连接时,它会显示默认的浏览器错误页面,所要的就是根本不显示任何浏览器错误页面,而是显示敬酒消息和空白屏幕。

我的代码:

public class EarnFragment extends Fragment {
WebView mWebView;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v=inflater.inflate(R.layout.fragment_earn, container, false);
    mWebView = (WebView) v.findViewById(R.id.webview);
    mWebView.loadUrl("https://demo.hazzardweb.com/easylogin-pro/");

    // Enable Javascript
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    // Force links and redirects to open in the WebView instead of in a browser
    mWebView.setWebViewClient(new WebViewClient());

    return v;
}

}

2 个答案:

答案 0 :(得分:1)

如果要显示黑屏而不是Webview,首先需要更改布局文件。 然后您在加载网址之前检查互联网连接。 检查互联网连接时间是否不可用,请隐藏您的Web视图并显示Toast消息和相关布局。 其他人则隐藏Relativelayout noConnection。

第1步:创建这样的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/webViewData"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <RelativeLayout
        android:id="@+id/noConnection"
        android:layout_width="match_parent"
        android:background="#000000"
        android:layout_height="match_parent"/>
</RelativeLayout>

</LinearLayout>

第2步:使用此功能检查您的互联网连接。

public static boolean checkInternetConnection(Context context) {
    if (context != null) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (cm != null) {
            return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected() && cm.getActiveNetworkInfo().isConnectedOrConnecting();
        } else {
            return false;
        }
    } else {
        return false;
    }

}

最后,请在代码中执行此操作,然后再加载url,

public class EarnFragment extends Fragment {
WebView mWebView;
RelativeLayout noConnection;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {

View v=inflater.inflate(R.layout.fragment_earn, container, false);
mWebView = (WebView) v.findViewById(R.id.webview);
noConnection = (RelativeLayout)v.findViewById(R.id.noConnection);

// Enable Javascript
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

if(checkInternetConnection(getActivity())){
 noConnection.setVisibility(View.GONE);
 mWebView.setVisibility(View.VISIBLE);
 mWebView.loadUrl("https://demo.hazzardweb.com/easylogin-pro/");

}else{
 noConnection.setVisibility(View.VISIBLE);
 mWebView.setVisibility(View.GONE);
}


// Force links and redirects to open in the WebView instead of in a browser
mWebView.setWebViewClient(new WebViewClient());

return v;
}

答案 1 :(得分:0)

第1步:创建include_error_list_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ebebeb"
    android:gravity="center"
    android:orientation="vertical">
    <!--android:background="#ebebeb"-->

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/labelError"
            android:layout_centerHorizontal="true"
            android:src="@drawable/img_icon_error_list" />

        <TextView
            android:id="@+id/labelError"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:gravity="center"
            android:padding="10dp"
            android:text="@string/err_error_list"
            android:textColor="@color/color_app_font_primary" />

        <ProgressBar
            android:id="@+id/errorProgressBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/labelError"
            android:layout_centerHorizontal="true"
            android:layout_margin="20dp"
            android:visibility="gone"/>

    </RelativeLayout>

</LinearLayout>

步骤2:制作片段布局fragment_abc.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <RelativeLayout
        android:id="@+id/errorView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone">

        <include layout="@layout/include_error_list_view" />

    </RelativeLayout>

</RelativeLayout>

步骤3:与JAVA绑定布局。

public class AbcFragment extends Fragment {

    private final String TAG = "AbcFragment";
    private WebView webView;
    private ProgressDialog progress;
    private RelativeLayout errorView;
    private boolean isShowErrorWiew = false;
    private ProgressDialog progress;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_abc, container, false);
        webView = (WebView) view.findViewById(R.id.webview);
        errorView = (RelativeLayout) view.findViewById(R.id.errorView);
        TextView labelError = (TextView) view.findViewById(R.id.labelError);
        labelError.setText("Application unable to connect with internet.");
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

        showProgressBarWithoutHide();

        errorView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isShowErrorWiew = false;
                showProgressBarWithoutHide();
                webView.loadUrl("https://demo.hazzardweb.com/easylogin-pro/");
            }
        });
        try {
            webView.setWebViewClient(new WebViewClient() {
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    Log.i(TAG, "Processing webview url click...");
                    view.loadUrl(url);
                    return true;
                }

                public void onPageFinished(WebView view, String url) {
                    Log.i(TAG, "Finished loading URL: " + url);
                    if (!isShowErrorWiew) {
                        errorView.setVisibility(View.GONE);
                    }
                    hideProgressBar();
                }

                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    Log.e(TAG, "Error: " + description);
                    isShowErrorWiew = true;
                    errorView.setVisibility(View.VISIBLE);
//                Snackbar.make(webView, getString(R.string.err_process_webView), Snackbar.LENGTH_LONG).show();
                }
            });

            webView.loadUrl("https://demo.hazzardweb.com/easylogin-pro/");

        } catch (Throwable th) {
            th.printStackTrace();
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        webView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        /*Todo Always Pause WebView Because Background video play is violating google policy*/
        webView.onPause();
    }

    public void hideProgressBar() {
             if (progress != null) {
             progress.dismiss();
             }
      }

public void showProgressBarWithoutHide() {


        if (progress == null) {
            progress = new ProgressDialog(getActivity());
            progress.setMessage(getString(R.string.please_wait));
            progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progress.setIndeterminate(true);
            progress.setCancelable(false);
            progress.show();
        } else if (!progress.isShowing()) {
            progress.show();
        }

}
}