2012-05-14 44 views
0

我有一個startActivity,它顯示一個警告對話框,直到我的異步任務完成了我的下載和解析xml。然後我去下一個startActivity。問題在於我爲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

刪除:Thread.sleep(10000);' – Blundell

回答

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

這就是答案,但它仍然存在根本上的缺陷,爲什麼你想猜測隨機時間,然後開始下一個活動。您應該查看使用帶有ASyncTask的DialogFragment,並在返回時可以開始第二個活動。

+0

謝謝我移動線程之外的延遲,它是固定的。基本上我正在下載一個文件。我需要檢查它的下載時間,然後解析它,然後開始下一個活動:/ – user1394295

1

爲什麼要使用一個活動呢?如果您所要做的只是在下載數據時顯示忙碌指示符,則應使用ProgressDialog。你可以很容易地用dialog.show()顯示對話框,並通過調用dialog.dismiss()來關閉對話框。如果你想設置一個自定義消息,你可以調用dialog.setMessage(「我的消息」)。

+0

是的,bobbake說的很好。你也應該知道你的活動的主題。也許嘗試@android:style/Theme.Translucent – ootinii