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