开发者

Progress bar with AsyncTask Object on initial app load

开发者 https://www.devze.com 2023-04-12 01:59 出处:网络
I have looked around on the API and through a few questions on here, and I think I am on the right path. My app is based on a webView object and the initial load has quite a few cached pages so I want

I have looked around on the API and through a few questions on here, and I think I am on the right path. My app is based on a webView object and the initial load has quite a few cached pages so I want progressDialog on the initial start up instead of the blank black screen. Right now the app just crashes but I believe it is because I am creating and calling the AsyncTask object in the wrong place. Right now it is being called in the onCreate() method. I’m not new to Java but I am new to Android and this idea of not working with a main() function is confusing to me.

So where should I call the execute() function if I only want the ProgressDialog shown on the initial launch? And is my AsyncTask object even set up correctly?

public class site extends Activity {
private WebView engine;
private String urlSave;
private WebViewClient yourWebClient;
private ProgressDialog initLoadDialog;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);
   setContentView(R.layout.splash);

    yourWebClient = new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.contains("tel:") == true) { 
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
                startActivity(intent); 
            }
            else if(url.contains(“blah") == true && url.contains(“blah2") == false) {
                view.loadUrl(url);
            }
            else if(url.contains(“blah3") == true) {
                double[] loc = getGPS();
                url += "&cLat=" + loc[0] + "&cLong=" + loc[1];
                view.loadUrl(url);  
            }
            else {
                /*Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("url")); 
                startActivity(browserIntent);*/
            }
        return true;
        }
    };
}
@Override
public void onStart() {
    progressSetup();
    setContentView(R.layout.main);
}

public void progressSetup () {
    initLoadDialog = 开发者_运维技巧new ProgressDialog(site.this);
    initLoadDialog.setMessage("A message");
    initLoadDialog.setIndeterminate(false);
    initLoadDialog.setMax(100);
    initLoadDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    urlLoad loading = new urlLoad();
    loading.execute();
} 
private class urlLoad extends AsyncTask<String, Integer, String>{
    @Override
    protected String doInBackground(String... url) {
        try {
            engine = (WebView) findViewById(R.id.web_engine);
            engine.getSettings().setJavaScriptEnabled(true);
            engine.getSettings().setBuiltInZoomControls(true);
            engine.getSettings().setSupportZoom(true); 
            engine.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
            engine.getSettings().setGeolocationEnabled(true);
            engine.setWebViewClient(yourWebClient);
            engine.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
            engine.loadUrl(“albhal");
        } catch (Exception e) {}
        return null;
    }
    protected void onProgressUpdate(Integer... progress) {
        initLoadDialog.setProgress(engine.getProgress());
    }

}
}


Check your adb log, the error will pretty much explain to you what you didn't do right. There's a lot of bad practice in your code. For example you call setContentView() in two Methods with different Layouts. The Flow of a android application is to call "onCreate", then "onStart". There is no reason to distinguish between those methods for you. Merge them and decide which layout to populate. Also it is recommended to change the user-interface (this means also the dialogs) through the managing activity. In your case you are creating a ProgressDialog in the activity which then gets modified by the task. This is something you should avoid.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号