Threaded Web Service Call

Ich fordere Informationen von einem Webdienst in meiner Android-App an. Der Webdienst gibt eine Liste von Elementen zurück, wobei jedes Element ein base64-Image und einige Informationen enthäl

Erste Methode: Greifen Sie einfach auf den Webdienst zu und erhalten Sie das Ergebnis. Dies bedeutet ein Einfrieren der Benutzeroberfläche, bis die Daten heruntergeladen wurden. Keine gute Lösung

Zweite Methode: Legen Sie den Datendownload in einen Thread und zeigen Sie eine Fortschrittsanzeige mit einer Meldung an.

 private void StartGettingData()
    {
        viewInfo = new Runnable(){
            public void run() {
                getData(); //from the web service
            }
        };
        Thread thread =  new Thread(null, viewInfo, "MagentoBackground");
        thread.start();
        progressDialog = ProgressDialog.show(TracksListActivity.this,    
              "Please wait...", "Retrieving data from WEB...", true);
    }

    private void getData(){
    {
      get data from web service into a list and then 

      runOnUiThread(returnRes);
    }

     private Runnable returnRes = new Runnable() {

     public void run() {
         populate the listview adapter with info from the web service result list and

         progressDialog.dismiss();
         generalTrackInfoAdapter.notifyDataSetChanged();
     }
 };

Dies zeigt ein schönes Ladebild und die Meldung. Der Benutzer muss warten, bis der gesamte Download abgeschlossen ist. Ich weiß nicht, wie ich den getdata () -Thread abbrechen soll.

Dritte Methode: Ich hätte gerne etwas, der Benutzer drückt einen Knopf, um Daten abzurufen, ein Thread lädt Element für Element vom Webdienst herunter und zeigt es sofort in der Liste an. Die Nutzung kann die Anfrage jederzeit per Knopfdruck abbrechen.

Aber wie geht das? Oder gibt es einen anderen Weg?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage