2017-08-16 23 views
0

今私は解決できない問題に直面しています。特定のデータで2つの配列を塗りつぶすスレッドがあり、しかし、私のメインスレッドは、スレッドが終了するのを待つことはありませんし、私は理由を知らない!ここ は、あなたはそれがUIを凍結するメインスレッドで非同期ネットワーキングや時間のかかる操作を実行することはできません私のコードメインスレッドは別のスレッドが実行を終了するのを待たずに

private void loadingData(){ 
    Thread myThread=new Thread(new Runnable() { 
     @Override 
     public void run() { 
      getNationalities(); 
      getReligions(); 
     } 
    }); 

    myThread.start(); 
    try { 
     myThread.join(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

    loadingIcon.show(); 

    while(myThread.isAlive()){} 

    //Here I'm using the two filled arrays 
    nationalitySpinner(); 
    religionSpinner(); 

    loadingIcon.hide(); 
} 

答えて

3

です。

てみAsyncTaskOnPostExecuteにあなたはUI

に例更新することができ、AsyncTaskを使用する:詳細はProcesses and threadsを参照してください

private void loadingData(){ 
    new MyTask().execute(); 

} 

class MyTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     loadingIcon.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... voids) { 

     getNationalities(); 
     getReligions(); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 

     nationalitySpinner(); 
     religionSpinner(); 

     loadingIcon.hide(); 

    } 
} 

を、AsyncTask

+0

あなたが実装する方法を私に例を与えることができますそれ? –

+0

@AhmedKhairy、更新された私の答え –

+0

それは私にヌルポインタの例外を持って、私はなぜ、それはおそらく配列がまだ満たされているのか分からないのですか?しかし、私はどのようにわかりませんが、私はあなたとより明確になります、私は私のUIは、データがいっぱいになるまで待つ、エンドユーザーのinfrontの代わりに、私を得るのですか? –

関連する問題