Показать ошибку, чтобы предотвратить отображение веб-просмотра, когда нет доступного соединения - PullRequest
0 голосов
/ 14 марта 2019

Когда нет доступного соединения, отображается страница с ошибкой браузера по умолчанию. Нужно просто не отображать страницу ошибки браузера, вместо всплывающего сообщения и пустого экрана.

Мой код:

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 ]

1 голос
/ 14 марта 2019

Если вы хотите отобразить черный экран вместо веб-просмотра, сначала вам нужно изменить файл макета. Затем вы проверяете интернет-соединение, прежде чем загрузить URL. проверьте, если интернет не доступен, но в это время скрывайте свое веб-представление и отображайте ваше сообщение и относительное расположение. В противном случае скрыть 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;
}
0 голосов
/ 14 марта 2019

Шаг 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();
        }

}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...