0

我有一个 startActivity,它显示一个警报对话框,直到我在异步任务中完成对 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;
}

}

4

2 回答 2

1

为什么要使用活动?如果您只想在下载数据时显示忙碌指示符,您应该使用ProgressDialog。您可以使用 dialog.show() 轻松显示对话框,并通过调用 dialog.dismiss() 关闭对话框。如果要设置自定义消息,可以调用 dialog.setMessage("My Message")。

于 2012-05-14T17:36:40.517 回答
0

你不能让 UI 线程休眠并且仍然期望显示一些东西。

删除这一行:

 Thread.sleep(10000);

你想要的是一个处理程序并发布一个等待 10000 的可运行文件,然后开始你的下一个活动。

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

这就是答案,但它仍然存在根本缺陷,为什么您要猜测一个随机时间然后开始下一个活动。您应该考虑将 DialogFragment 与 ASyncTask 一起使用,当它返回时,您可以开始您的第二个活动。

于 2012-05-14T18:20:57.673 回答