0

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

}

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

それが答えですが、ランダムな時間を推測してから次のアクティビティを開始する理由には、依然として根本的な欠陥があります。ASyncTask で DialogFragment を使用することを検討する必要があります。それが戻ったら、2 番目のアクティビティを開始できます。

于 2012-05-14T18:20:57.673 に答える