2017-08-16 229 views
0

現在我正面臨一個我無法解決的問題,有一個線程需要用特定數據填充兩個數組,然後再使用這兩個數組,然而,我的主線不會等待線程完成,我不知道爲什麼! 這裏是我的代碼主線程不會等待另一個線程完成執行

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

您不能運行在主線程將凍結UI異步聯網或操作費時。

嘗試使用AsyncTask,在AsyncTaskOnPostExecute您可以在UI

示例更新:

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

    } 
} 

欲瞭解更多信息請參閱Processes and threadsAsyncTask

+0

你可以給我一個例子,如何實現它? –

+0

@AhmedKhairy,更新我的回答 –

+0

它讓我空指針異常,我不知道爲什麼,也許數組尚未填滿?但我不知道如何,但我會更清楚你的意思,我希望我的用戶界面等待數據填滿,而不是在最終用戶的盈方面前填滿,你能找到我嗎? –