2016-09-01 10 views
1

Я хочу создать простой браузер безопасности для детей на Android, и я хочу проверить каждый URL-адрес перед загрузкой с помощью этого api: https://www.mywot.com/wiki/API. Но иногда после нажатия на url начинается бесконечный цикл загрузки этой ссылки. Я стараюсь, чтобы переопределить shouldOverrideUrlLoading как это:Android WebView - бесконечный цикл после нажатия

private class BrowserWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      loadUrl(url); 
      return true; 
     } 
    } 
} 

    private interface UrlCheckListener { 
     void urlChecked(boolean isGood); 
    } 

    private void loadUrl(String query) { 
      String safeUrl = UrlCheckerUtils.getSafeUrlFromQuery(query); 
      checkUrlBeforeLoad(safeUrl, valid -> { 
       if (isViewAttached()) { 
        if (valid) { 
         getView().loadPageByUrl(safeUrl); 
        } else { 
         getView().showError(); 
        } 
       } 
      }); 
     } 

     private void checkUrlBeforeLoad(String url, UrlCheckListener listener) { 
      try { 
       URI uri = new URI(url); 
       String domain = uri.getHost() + "/"; 

       wotService.getLinkReputation(domain) 
         .subscribeOn(Schedulers.io()) 
         .observeOn(AndroidSchedulers.mainThread()) 
         .subscribe(wotResponse -> listener.urlChecked(wotResponse.isSafe())); 
      } catch (URISyntaxException e) { 
       Timber.e(e, "Error while parsing url"); 
     } 
    } 

loadPageByUrl ввиду:

@Override 
public void loadPageByUrl(String url) { 
    webView.loadUrl(url); 
} 

Можете ли вы помочь мне исправить это, пожалуйста?

+3

в 'loadPageByUrl', вы вызываете' loadUrl', который, в свою очередь, вызывает 'loadPageByUrl' – Danh

+0

@Danh и как его исправить? – shmakova

+0

Я не знаком с Android, я не могу дать вам правильный ответ. Попробуйте использовать отладчик или найдите там какой-нибудь учебник – Danh

ответ

0

Ошибка была String safeUrl = UrlCheckerUtils.getSafeUrlFromQuery(query);, где я создал новый объект String. Когда я начинаю манипулировать с url в shouldOverrideUrlLoading, он начинает работу без бесконечных переадресаций.

Смежные вопросы