studio programacion para herramientas fundamentos desarrollo con avanzado aplicaciones java android webview android-progressbar

java - programacion - manual android studio avanzado



Vista web de Android Timeout si tarda más de un cierto tiempo en cargarse (1)

He actualizado su método de configuración de la vista web. A continuación, encontrará el código actualizado. He agregado una clase loaderTimerTask. Se agregó un código para el temporizador y se agregó un comentario para una mayor comprensión. Por favor actualice este código si lo necesita.

private boolean isPageLoadedComplete = false; //declare at class level public void WebViewSettings(){ webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setSupportZoom(true); webView.getSettings().setLoadWithOverviewMode(true); webView.canGoBack(); /** *I had put code here */ Timer myTimer = new Timer(); //Start this timer when you create you task myTimer.schedule(loaderTask, 3000); // 3000 is delay in millies webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().equals(urlString)) { // This is my web site, so do not override; let my WebView load the page return false; } // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } @Override public void onLoadResource(WebView view, String url) { // Check to see if there is a progress dialog if (progressDialog == null) { progressDialog = new ProgressDialog(context); progressDialog.setTitle("Loading..."); progressDialog.setMessage("Please wait."); //progressDialog.setCancelable(false); progressDialog.setIndeterminate(true); progressDialog.show(); } } @Override public void onPageFinished(WebView view, String url) { isPageLoadedComplete = true; // Page is done loading; // hide the progress dialog and show the webview if (progressDialog.isShowing()) { progressDialog.dismiss(); progressDialog = null; webView.setEnabled(true); } } @Override public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } @Override public void onReceivedError(WebView view, int errorCod,String description, String failingUrl) { Toast.makeText(context, "Your Internet Connection May not be active Or " + description , Toast.LENGTH_LONG).show(); } }); } /** *This class is invoke when you times up. */ class loaderTask extends TimerTask { public void run() { System.out.println("Times Up"); if(isPageLoadedComplete){ }else{ if (progressDialog.isShowing()) { progressDialog.dismiss(); progressDialog = null; webView.setEnabled(true); } //show error message as per you need. } } }

Quiero agotar el tiempo de mi vista web si lleva mucho tiempo cargar mostrando un mensaje de error. Estoy usando setWebViewClient porque necesito usar el public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) .

He estado mirando alrededor y vi que puedo usar el método en onProgressChanged(WebView view, int newProgress) . Ahora no puedo usar este método en setWebViewClient y no puedo encontrar la manera de resolver este problema. Otro problema que tengo es que la barra de progreso nunca desaparece una vez que se carga la página, tampoco puedo agregar un punto de interrupción al método public void onPageFinished(WebView view, String url) .

Método de configuración de la vista web:

public void WebViewSettings(){ webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setBuiltInZoomControls(true); webView.getSettings().setSupportZoom(true); webView.getSettings().setLoadWithOverviewMode(true); webView.canGoBack(); webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().equals(urlString)) { // This is my web site, so do not override; let my WebView load the page return false; } // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } @Override public void onLoadResource(WebView view, String url) { // Check to see if there is a progress dialog if (progressDialog == null) { progressDialog = new ProgressDialog(context); progressDialog.setTitle("Loading..."); progressDialog.setMessage("Please wait."); //progressDialog.setCancelable(false); progressDialog.setIndeterminate(true); progressDialog.show(); } } @Override public void onPageFinished(WebView view, String url) { // Page is done loading; // hide the progress dialog and show the webview if (progressDialog.isShowing()) { progressDialog.dismiss(); progressDialog = null; webView.setEnabled(true); } } @Override public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); } @Override public void onReceivedError(WebView view, int errorCod,String description, String failingUrl) { Toast.makeText(context, "Your Internet Connection May not be active Or " + description , Toast.LENGTH_LONG).show(); } }); }

Por lo tanto, los problemas que tengo son la barra de progreso que no se elimina una vez que la página web se ha cargado y necesito agotar el tiempo de espera de la vista web si se tarda una cierta cantidad de tiempo en cargarse. Parece que se muestra la barra de progreso, luego desaparece como debería, luego comienza a cargarse nuevamente y no se detiene. Gracias