2016-04-19 9 views
0

Ok, also versuche ich, einen Fortschrittsdialog zu erhalten, der angezeigt wird, wenn Daten aus dem Internet heruntergeladen und auf die Benutzeroberfläche angewendet werden. Meine asynctask funktioniert gut und es führt alle Schritte, aber es zeigt nie den Dialog jemals. Ich weiß nicht, was ich hier falsch gemacht habe und ich bin ziemlich oft an die Wand gegangen. Ich habe sogar versucht, die asynchrone Aufgabe in den neuen ausführbaren Thread einzufügen und es so auszuführen, dass auch der Dialog nicht angezeigt wurde. Ich rufe die asynchrone Aufgabe wie folgt aufFortschrittsanzeige wird während eines asynctask-Aufrufs nicht angezeigt

new runningMan().execute(); 

Hier ist der Code, den ich versuche zu laufen.

private class runningMan extends AsyncTask<Void, Void, Integer> 
{ 

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

     Log.d("Runningman: ", "Started running"); 
     //this method will be running on UI thread 
     progress = ProgressDialog.show(PromotionMain.this, "Loading", "PleaseWait", true); 

    } 
    @Override 
    protected Integer doInBackground(Void... params) { 
     //parse the JSON string 
     JSONParser jp = new JSONParser(); 
     try { 
      Log.d(username , password); 
      jp.parsesData(promos, myJson, pictureArray, pathArray, labelArray); 
      Log.d("Runningman: ", "Finished parsing"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return 1; 
    } 
    @Override 
    protected void onPostExecute(Integer result) { 
     super.onPostExecute(result); 
     ArrayList<ListItem> listData = getListData(); 
     fillListView(listData); 
     Log.d("Runningman: ", "Finished runing"); 
     //this method will be running on UI thread 
     progress.dismiss(); 
    } 

} 

Vielen Dank für jede Hilfe mit diesem.

+0

Ja, ich sehe Gestartet Beendet das Parsen und Finished läuft läuft. – MNM

Antwort

1

Aufruf "super.onPreExecute();" und "super.onPostExecute (Ergebnis);" nach Ihrem Code für den Fortschrittsdialog. Oder besser, sie loswerden (wenn Sie keine Gründe haben, sie anzurufen).

den folgenden Code verwenden:

private class runningMan extends AsyncTask<Void, Void, Integer> 
{ 

    @Override 
    protected void onPreExecute() { 

     Log.d("Runningman: ", "Started running"); 
     //this method will be running on UI thread 
     progress = ProgressDialog.show(PromotionMain.this, "Loading", "PleaseWait", true); 
     super.onPreExecute(); 

    } 
    @Override 
    protected Integer doInBackground(Void... params) { 
     //parse the JSON string 
     JSONParser jp = new JSONParser(); 
     try { 
      Log.d(username , password); 
      jp.parsesData(promos, myJson, pictureArray, pathArray, labelArray); 
      Log.d("Runningman: ", "Finished parsing"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return 1; 
    } 
    @Override 
    protected void onPostExecute(Integer result) { 
     ArrayList<ListItem> listData = getListData(); 
     fillListView(listData); 
     Log.d("Runningman: ", "Finished runing"); 
     //this method will be running on UI thread 
     progress.dismiss(); 
     super.onPostExecute(result); 
    } 

} 
+0

Ich ändere es, aber es zeigt immer noch nicht. Es kann für einen Blinzeln zeigen, aber wird nicht angezeigt, wie ich denke, dass es sollte. Es sollte angezeigt werden, bis die ui richtig gebaut wurde? – MNM

+0

Nach dieser Änderung wird der Fortschrittsdialog sicher funktionieren. Wenn der Dialog für eine sehr kurze Zeit angezeigt wird, bedeutet dies Ihre DoInBackground() - Methode und andere Aufgaben vor "progress.dismiss();" sind sehr schnell fertig. Bei längeren Aufgaben ist der Fortschrittsdialog länger sichtbar. –

+0

Danke, ich denke, ich verstehe, ich werde versuchen, dies auf etwas zu verwenden, das etwas länger dauert. – MNM