Webview with asynctask on Android

android, android-asynctask, android-webview, loading, webview

Solution

Don't use AsyncTask, as you are not in charge of loading the webview. If you want to show a progress dialog, here is how to do it.

private ProgressDialog dialog = new ProgressDialog(WebActivity.this);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);
    webView = (WebView) findViewById(R.id.webView1);

    Bundle extras = getIntent().getExtras();
    String url=extras.getString("adres");

    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {                  
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    });
    dialog.setMessage("Loading..Please wait.");
    dialog.setCanceledOnTouchOutside(false);
    dialog.show();
    webView.loadUrl(url);



    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
}

The idea is that you show the dialog, you start loading the url, and when the webclient sees that the page has finished loading, it dismisses the dialog.

Problem

i want to do it which the progress dialog waits the loading item on webview. How can i do it which `dialog.dismiss()` event depend on loading item on webview? ``` public class asynctask extends AsyncTask<Void, Void, Void> { private ProgressDialog dialog = new ProgressDialog(WebActivity.this); @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub ``` in there how can i do it ?? ``` dialog.dismiss(); ``` dialog disappear without waiting ``` } @Override protected void onPreExecute() { // TODO Auto-generated method stub dialog.setMessage("Loading..Please wait."); dialog.show(); dialog.setCanceledOnTouchOutside(false); } @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub return null; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview); webView = (WebView) findViewById(R.id.webView1); Bundle extras = getIntent().getExtras(); String url=extras.getString("adres"); webView.setWebViewClient(new WebViewClient()); webView.loadUrl(url); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); new asynctask().execute(); ``` }

Original source