Задать вопрос
@vasiaduman

Как загрузить страницу при ошибке в WebView?

Пришлось разово сделать WebView приложение и возникла трудность. Хочу при ошибке вывести HTML страницу, но никак не получается это сделать. Помогите подправить пожалуйста код.

package com.app.p2pworld;

import static android.app.PendingIntent.getActivity;
import static android.content.ContentValues.TAG;

import static java.security.AccessController.getContext;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import java.net.URISyntaxException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MainActivity2 extends AppCompatActivity {
    static {
        AppCompatDelegate.setDefaultNightMode(
                AppCompatDelegate.MODE_NIGHT_NO);
    }

    WebView webView;
    SwipeRefreshLayout swipeRefreshLayout;
    private ValueCallback<Uri> mUploadMessage;
    public ValueCallback<Uri[]> uploadMessage;
    public static final int REQUEST_SELECT_FILE = 100;
    private final static int FILECHOOSER_RESULTCODE = 1;

    public String url = "https://t.me/4chan";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        webView = (WebView) findViewById(R.id.webView);
        swipeRefreshLayout = findViewById(R.id.SL);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setSaveFormData(true);
        webView.getSettings().setAllowContentAccess(true);
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setAllowFileAccessFromFileURLs(true);
        webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
        webView.getSettings().setSupportZoom(false);
        webView.loadUrl(url);
        webView.setWebChromeClient(new WebChromeClient() {
            class WebChromeClient extends WebViewClient {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    if (url.startsWith("intent://")) {
                        try {
                            Context context = view.getContext();
                            Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);

                            if (intent != null) {
                                view.stopLoading();

                                PackageManager packageManager = context.getPackageManager();
                                ResolveInfo info = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
                                if (info != null) {
                                    context.startActivity(intent);
                                } else {
                                    String fallbackUrl = intent.getStringExtra("browser_fallback_url");
                                    view.loadUrl(fallbackUrl);

                                    // or call external broswer
//                    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(fallbackUrl));
//                    context.startActivity(browserIntent);
                                }

                                return true;
                            }
                        } catch (URISyntaxException e) {

                            Log.e(TAG, "Can't resolve intent://", e);
                        }
                    }

                    return false;
                }
                @Override
                public void onReceivedError(WebView WebChromeClient, int errorCode, String description, String failingUrl) {
                    WebChromeClient.loadUrl("/assets/error.html");
                }
            }

        });

    }
}


При ошибке у меня отображается не страница, а стандартное окно ошибки
63c2b6942caa2726499184.png
  • Вопрос задан
  • 155 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы