我有一个startActivity,显示一个警告对话框,直到我的async任务中的xml下载和解析完成。然后我去下一个startActivity。问题是即使我对startActivity的线程有等待,屏幕上也没有显示任何内容。如果我注释掉命令startActivity,我会看到一切。为什么是这样?有人可以帮忙吗?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AlertDialog ad = new AlertDialog.Builder(this).create();
ad.setCancelable(false);
ad.setMessage("Loading Events");
ad.show();
if (!isNetworkAvailable()){
ad = new AlertDialog.Builder(this).create();
ad.setCancelable(false); // This blocks the 'BACK' button
ad.setMessage("Not Connected Exiting");
ad.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
ad.show();
}
downloadXML();
events=parseXML();
((CATApplication)this.getApplication()).setEvents(events);
try{
Thread.sleep(10000);
Intent intent = new Intent(this,EventsListActivity.class);
startActivity(intent);
}catch(Exception e){}
}
//check for network connection
private boolean isNetworkAvailable(){
ConnectivityManager connectivityManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo=connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo.isConnectedOrConnecting();
}
public void onPause(){
File xmlFile = new File("deletefileonexit");
xmlFile.delete();
finish();
super.onPause();
}
private void downloadXML() {
String url = "locationofxmlonweb";
new DownloadFileAsync().execute(url);
}
public Events parseXML(){
Events newEvents=new Events();
try{
while(!(new File("locationofxml").exists())){}
InputStream in=new FileInputStream("locationofxml");
newEvents=new ParseEventsXML().parse(in);
}
catch (Exception e){}
return newEvents;
}
}
答案 0 :(得分:1)
为什么要使用某项活动?如果你要做的只是在下载数据时显示忙碌指示,你应该使用ProgressDialog。您可以使用dialog.show()轻松显示对话框,并通过调用dialog.dismiss()关闭对话框。如果要设置自定义消息,可以调用dialog.setMessage(“我的消息”)。
答案 1 :(得分:0)
您无法在UI线程中休眠,但仍希望能够显示某些内容。
删除此行:
Thread.sleep(10000);
你想要的是一个处理程序并发布一个等待10000的runnable然后开始你的下一个活动。
public void onCreate(Bundle savedInstanceState){
.....
new Handler().postDelayed(t, 10000);
}
Thread t = new Thread(){
public void run() {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
};
};
这就是答案,但它仍然存在根本性的缺陷,为什么你想要猜测一个随机时间然后开始下一个活动。您应该看一下使用带有ASyncTask的DialogFragment,当它返回时,您可以开始第二个活动。