初始应用程序加载时带有AsyncTask对象的进度条

时间:2011-10-07 21:16:35

标签: android webview android-asynctask

我已经浏览了API并通过这里的一些问题,我认为我走的是正确的道路。我的应用程序基于webView对象,初始加载有很多缓存页面,所以我想在初始启动时使用progressDialog而不是空白黑屏。现在应用程序崩溃,但我相信这是因为我在错误的地方创建并调用AsyncTask对象。现在它正在onCreate()方法中调用。我不是Java的新手,但我是Android新手,这个不使用main()函数的想法让我感到困惑。

那么,如果我只想在首次发布时显示execute(),我应该在哪里调用ProgressDialog函数?我的AsyncTask对象是否设置正确?

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());
    }

}
}

1 个答案:

答案 0 :(得分:0)

检查您的adb日志,错误将向您解释您做得不对的内容。 你的代码中有很多不好的做法。例如,您在两个具有不同布局的方法中调用setContentView()。 Android应用程序的流程是调用“onCreate”,然后调用“onStart”。没有理由为您区分这些方法。合并它们并确定要填充的布局。 此外,建议通过管理活动更改用户界面(这也意味着对话框)。在您的情况下,您将在活动中创建ProgressDialog,然后由任务修改。这是你应该避免的。