Auf Antwort vom Webserver warten

  • Antworten:5
Otmar Schramm
  • Forum-Beiträge: 20

04.05.2014, 16:53:43 via Website

Ich noch mal!
Ich möchte das meine App schaut ob Daten auf dem Webserver da sind. Wenn ja, sollen diese in die geleerte DB eingetragen und geladen werden. Wenn nein, sollen die gespeicherten Werte geladen werden.
Das passiert aber nicht....
Die App fragt die Daten ab...liest aber die gespeicherten Werte aus und zeigt sie an. Danach werden die Werte vom Webserver hinzugefügt...
Wie bekomme ich ihn dazu zuerst den Webserver abzuwarten? Evtl mit einem toast solange für den User???

Hier der Code:

WebserverlistenListenGetTask task = new WebserverlistenListenGetTask ();
task.execute(dialog);
//Im WebserverlistenListenGetTask steht auch drin das die geladenen Daten in die DB eingefügt werden
//nun die Daten (entweder die vorhandenen oder die neu vom Webserver gelieferten Daten in die Liste übernehmen
//Es werden aber immer direkt die vorhandenen Daten eingelesen
listeData.addAll(dbManager.selectEinkaufsliste());

Also wie bekomme ich die App dazu die Antwort vom Webserver abzuwarten? Evtl. sogar mit Zeitvorgabe z.B. 15 sek?

Danke euch
Otmar

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.05.2014, 16:56:44 via Website

Du musst abwarten bis der Task fertig ist, und dann erst die Sachen laden.
Solange kannst du dem User eine Progress Dialog anzeigen

Oder du machst das genze mit einer Callback Methode, d.h. wenn der Thread mit laden fertig ist, meldet er sich im UI Thread zurück und dann werden die anderen Sachen geladen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Otmar Schramm
  • Forum-Beiträge: 20

04.05.2014, 16:58:08 via Website

Sorry, aber wie warte ich ab bis der Task zuende ist? Das wäre natürlich supi!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.05.2014, 17:43:33 via Website

Benutzt du dafür einen AsyncTask oder etwas anders.
Poste dies mal bitte.
Das mit dem Warten ist so eine Sache.
Dann bräuchtest du garkeinen Task aber bei android musst du so einen Haben

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Otmar Schramm
  • Forum-Beiträge: 20

04.05.2014, 18:40:12 via Website

Hier kommt die Klasse, die den Server abfragt, die Daten in die DB einfügt...

class EinkaufslistenGetTask extends AsyncTask<WebserverDialogFragment, Void, String> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
}

    @Override
    protected String doInBackground(WebserverDialogFragment... params) {
        String returnString = zur&uuml;ck;
        String result = ;
        InputStream is = null;
        StringBuilder sb = null;

        //http post =&gt; daten vom Server abfragen
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url_zum_Script);
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,utf-8),8);
                sb = new StringBuilder();
                sb.append(reader.readLine() + \n);
                String line = 0;
                while((line=reader.readLine()) != null) {
                    sb.append(line + \n);
                }
                is.close();
                result = sb.toString();
            }catch(Exception e) {
                Toast.makeText(getBaseContext(), Keine Daten vom Webserver!, Toast.LENGTH_LONG).show();
            }           
            //Wenn Daten vom Server kommen, Tabelle leeren
            if(result != ){
                dbManager.writeInDB(delete FROM tb_aktuell);
            }

            //paring data =&gt; auslesen der Daten aus dem JSON Array
            int artikel_id = 0;
            String artikel = ;
            try{
                JSONArray jArray = new JSONArray(result);
                JSONObject json_data = null;
                for(int i=0; i&lt;jArray.length(); i++) {
                    json_data = jArray.getJSONObject(i);
                    artikel_id = json_data.getInt(id);
                    artikel = json_data.getString(beschreibung);
                    //Eintrag den heruntergeladenen Artikels in die DB                  
                    StringBuilder sb_artikel = new StringBuilder(100);
                    sb_artikel.append(INSERT INTO tb_aktuell(artikel) VALUES(');
                    sb_artikel.append(artikel);
                    sb_artikel.append('));
                    dbManager.writeInDB(sb_artikel.toString());
                    addArrayList(artikel);
                }
            }catch(JSONException j1) {
                Log.e(TAG, doInBackground-JSONObjekt Exception:  + j1.toString());
            }catch(ParseException p1) {
                Log.d(TAG, doInBackground-ParseException:  + p1.toString());
            }catch(Exception e){
                Log.d(TAG, doInBackground-Exception:  + e.toString());
            }
        }catch(IOException ioe){
            Toast.makeText(getBaseContext(), Webserver nicht gefunden IOException, Toast.LENGTH_LONG).show();
        }catch(Exception e){
            Toast.makeText(getBaseContext(), Webserver nicht gefunden, Toast.LENGTH_LONG).show();
        }
        return returnString;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
    }

}

Antworten