2017-08-16 233 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

它让我空指针异常,我不知道为什么,也许数组尚未填满?但我不知道如何,但我会更清楚你的意思,我希望我的用户界面等待数据填满,而不是在最终用户的盈方面前填满,你能找到我吗? –