Как я могу заставить свое приложение получить URL-адрес ссылки, щелкнувшей в WebView, выполнить операции с ней, а затем загрузить ее? - PullRequest
1 голос
/ 02 декабря 2019

Я собираюсь предвосхитить это, говоря, что я абсолютный новичок в кодировании чего-либо в Android (я в основном учусь, как делать все через вас, классные парни и девушки в Stack Overflow :)). Я делаю приложение, которое является просто компонентом WebView, и я хочу, чтобы оно определяло, когда была нажата ссылка на этой странице WebView, получало URL этой ссылки, а затем перенаправляло пользователя на другую ссылку, если исходная ссылка имеетопределенная строка в нем. Наконец, WebView должен быть перезагружен либо с исходной ссылкой, либо с перенаправленной ссылкой.

Вот мой код для java-части приложения, где, как мне кажется, происходит ошибка:

public class Grades extends AppCompatActivity {

    private WebView webview;
    String ShowOrHideWebViewInitialUse = "show";
    private ProgressBar spinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grades);

        webview =(WebView)findViewById(R.id.webView);
        spinner = (ProgressBar)findViewById(R.id.progressBar1);
        webview.setWebViewClient(new CustomWebViewClient());

        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);
        webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        webview.loadUrl("myurl.com");
    }
    // This allows for a splash screen
    // (and hide elements once the page loads)
    private class CustomWebViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView webview, String url, Bitmap favicon) {
            // only make it invisible the FIRST time the app is run
            if (ShowOrHideWebViewInitialUse.equals("show")) {
                webview.setVisibility(webview.INVISIBLE);
            }
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            spinner.setVisibility(View.GONE);
            ShowOrHideWebViewInitialUse = "hide";
            view.setVisibility(webview.VISIBLE);
            super.onPageFinished(view, url);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.contains("/courses/")) {
                url = url + "/grades"
                WebView.loadUrl(url);
                return false;
            } else {
                WebView.loadUrl(url)
            }

        }
    }
}

Я выполнил некоторые действия по устранению неполадок и добавил код, который заставил приложение отобразить URL в logcatв последнем @override. Проблема заключалась в том, что WebView не загружал страницу, вместо этого в logcat была просто бесконечная петля, печатающая URL-адрес текущей страницы для WebView, а не URL-адрес * 1008. * ссылка . Поэтому мне кажется, что у меня двойная проблема, и я понятия не имею, что делать.

Для информации: средние два @overrides предназначены только для отображения счетчика во время загрузки главной страницы при запуске приложения. Кажется, все работает нормально до последнего @ override.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2019

Я понял это. Последнее переопределение должно быть:

@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        System.out.println(Uri.parse(url).getHost());
        if ("myurl.com".equals(Uri.parse(url).getHost())) {
            webview.loadUrl(url);
            String newurl = webview.getUrl();
            System.out.println(newurl);
            if (newurl.contains("/grades") || newurl.contains("/users") || newurl.contains("/assignments")) {
                webview.loadUrl(newurl);
                return false;
            }
            if (newurl.contains("myurl.com") && newurl.contains("/grades") == false && newurl.contains("/users") == false && newurl.contains("/assignments") == false) {
                newurl = newurl + "/grades";
                System.out.println(newurl);
                webview.loadUrl(newurl);
                return false;
            }
            return false;
        }
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;
    }
0 голосов
/ 02 декабря 2019

попробуйте добавить оператор возврата в конец переопределенной функции и изменить возвращаемое значение из-за изменения URL.

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