2017-08-16 5 views
0

Im Augenblick stehe ich vor einem Problem, das ich nicht lösen kann. Es gibt einen Thread, den ich brauche, um zwei Arrays mit spezifischen Daten zu füllen, und diese beiden Arrays später zu verwenden. Mein Haupt-Thread wartet jedoch nicht auf den Thread und ich weiß nicht warum. Hier ist mein CodeDer Haupt-Thread wartet nicht darauf, dass ein anderer Thread die Ausführung beendet

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

Antwort

3

Sie keine asynchronen Netzwerk oder zeitaufwendiger Vorgang in der in Hauptthread ausgeführt werden kann, wird die Benutzeroberfläche einzufrieren.

Try AsyncTask, in OnPostExecute von AsyncTask verwenden Sie in UI

Beispiel aktualisieren können:

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

    } 
} 

Für weitere Informationen siehe Processes and threads, AsyncTask

+0

können Sie mir ein Beispiel geben, wie zu implementieren es? –

+0

@AhmedKhairy, Aktualisierte meine Antwort –

+0

es hat mir Null Pointer Exception und ich weiß nicht, warum ist das, vielleicht sind die Arrays noch nicht gefüllt? aber ich weiß nicht wie, aber ich werde klarer mit dir sein, ich will, dass meine Benutzeroberfläche wartet, bis die Daten gefüllt sind, anstatt vor dem Endbenutzer gefüllt zu werden, verstehst du mich? –

Verwandte Themen