2017-01-10 7 views
2

Я использую библиотеку Volley для отправки запроса json службе REST. Результат json затем анализируется и отображается в webView. Он работает нормально, за исключением того, что при загрузке отображается «веб-страница недоступна». Эта страница исчезает после загрузки данных.Как скрыть веб-страницу «недоступно» по умолчанию от Volley

Я поместил диалог прогресса во время загрузки, но не полностью скрыл веб-страницу по умолчанию. Есть ли у вас какие-либо идеи? Благодаря!

public void search(String input) { 
    showProgressDialog(R.string.loading); 
    word = RESTTool.encodeForWeb(input); 
    String url = "HTTP://restserver.com/" + word; 
    Map<String, String> params = RESTTool.getHeader(word); 

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, new JSONObject(params), new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      Log.d(TAG, "REST responds successfully"); 
      hideProgressDialog(); 
      String html = convertToHtml(response); 
      showHtml(html); 
     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      hideProgressDialog(); 
      Log.d(TAG, "receive error"); 
      showHtml(HtmlComposer.getHtmlWithContent(getString(R.string.error_no_network))); 
     } 
    }) { 
     @Override 
     public Map<String, String> getHeaders() { 
      Map<String, String> headers = RESTTool.getHeader(word); 
      return headers; 
     } 

    }; 
    RESTClient.getInstance(getContext()).addToRequestQueue(request); 
} 
+0

Пожалуйста отправьте соответствующий код. –

+0

Спасибо! Я отредактировал его. – flame3

ответ

1

выше ответ еще показывает «сайт не доступен» страницы до страницы показывает пользовательские ошибки.

Мое решение состоит в том, чтобы проверить, была ли информация загружена с помощью REST api и наконец отобразилась моя настроенная страница с ошибкой.

Процедура такова:

  1. Скрыть WebView перед обращением в службу REST
  2. В моем поиске (String ввода) функции, загружать информацию из REST API и проверить, если ошибка происходит

    @Override 
    
    public void onErrorResponse(VolleyError error) { 
    
        hideProgressDialog(); 
        errorHappened = true; 
    } 
    
  3. Переопределить onPageУдаление для WebClient и показать настроенную веб-страницу, если произошла ошибка. Поскольку onPageFinished вызывается все время, я помещаю два булеана, чтобы убедиться, что страница с ошибкой загружается только один раз. В противном случае это может вызвать проблемы при закрытии фрагмента. Я запустил кнопку под веб-просмотром, чтобы закрыть фрагмент, когда произошла ошибка. Он не отображается, когда ошибка не возникает.

    WebViewClient client = new WebViewClient() { 
        @Override 
        public void onPageFinished(WebView view, String url) { 
         if(errorHappened && !errorShown){ 
          webView.loadUrl("file:///android_asset/error.html"); 
          webView.setVisibility(View.VISIBLE); 
          errorShown = true; 
          buttonClose.setVisibility(View.VISIBLE); 
         } 
        } 
        //... other code 
    
        }; 
        webView.setWebViewClient(client); 
        // Show the web page 
        webView.loadDataWithBaseURL("file:///android_asset/", webPage, "text/html", "utf-8", null); 
        webView.setVisibility(View.VISIBLE); 
    
0

Я не знаю, нужен ли вам еще ответ. На всякий случай, для тех, кто сюда попадет, решение довольно простое. Этого должно быть достаточно, чтобы переопределить метод onReceivedError вашего WebViewClient и предоставить там страницу ошибки/загрузки, чтобы переопределить значение по умолчанию.

Например, если у вас есть собственный customErrorPage.html страницу в папке активов:

yourWebView.setWebViewClient(new WebViewClient() { 
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    mWebView.loadUrl("file:///android_asset/customErrorPage.html"); 
    } 
}); 
+0

Спасибо за ваш ответ. Однако теперь эта функция устарела. – flame3