Autore Topic: Problema async http client (loopj)  (Letto 705 volte)

Offline drucks87

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei ideos
  • Play Store ID:
    drucks team
  • Sistema operativo:
    Windows 7
Problema async http client (loopj)
« il: 15 Novembre 2013, 19:24:48 CET »
0
Ciao a tutti,
ho questo problema.

Utilizzo la libreria loopj e vorrei popolare una listview.

Il problema è questo: l'utente entra nella sezione dove ho la listview e lancio l'async task per reperire i dati da un mysql remoto e popolare la listview.

Sembra che il sistema prima popoli la listview senza aspettare che l'async task abbia finito.


Come potre ovviare a questo problema? Ho provato a popolare la list view nel onSuccess ma niente...
Allego codice...(praticamente passa subito a: Log.i("JSONObject", "SSize: "+personList.size());)


grazie
ciao a tutti

Codice (Java): [Seleziona]
public class Promozioni extends SherlockActivity implements OnItemClickListener{
        private ActionBar actionBar;     
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.promozioni);
           
           
            //action bar
        actionBar = getSupportActionBar();
        actionBar.setTitle("Promozioni");
        actionBar.setDisplayHomeAsUpEnabled(true);
       
       
        final ArrayList<Promozione> personList = new ArrayList<Promozione>();
        AsyncHttpClient client = new AsyncHttpClient();
       
        //
        RequestParams loopjParams = new RequestParams();
        loopjParams.put("tag", "getPromozioni");
        //Log.i("LOOPJ", "loopjParams: "+loopjParams);
       
        try {
            client.post(UrlServer.URL, loopjParams, new AsyncHttpResponseHandler() {
                @Override
                public void onSuccess(String response) {
                        Log.i("LOOPJ_RS", "JSON: "+response);
                    //JSONObject res;
                    JSONArray res;
                    try {
                        //res = new JSONObject(response);
                        res = new JSONArray(response);
                       
                        for (int i = 0; i < res.length(); i++) {
                            JSONObject row = res.getJSONObject(i);
                           
                            //Log.i("JSONObject", "JSONObject: "+i);
                           
                            Promozione pp = new Promozione("WAnna","WFalchi",R.drawable.creep_1);
                            personList.add(pp);
                           
                            Log.i("JSONObject", "Size: "+personList.size());
                           
                            /*HashMap<String, String> map = new HashMap<String, String>();
                            map.put(KEY_ID, ""+row.getInt("ID"));
                            map.put(KEY_AVATAR, row.getString("AVATAR"));
                                map.put(KEY_CITY, row.getString("CITY"));
                                myResultList.add(map);*/

                        }
                       
                       
                       
                    }
                    catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                @Override
                public void onFailure(Throwable e,String response) {
                    JSONObject res;
                    try {
                        res = new JSONObject(response);
                        Log.d("debug", res.getString("some_key")); // this is how you get a value out
                    }
                    catch (JSONException ex) {
                        // TODO Auto-generated catch block
                        ex.printStackTrace();
                    }
                }
            });
        }
        catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
       
       
        Log.i("JSONObject", "SSize: "+personList.size());
       
        ////////////////////////  
        Promozione [] people={
                        new Promozione("Anna","Falchi",R.drawable.creep_1),
                        new Promozione("Cameron", "Diaz", R.drawable.creep_2),
                        new Promozione("Jessica","Alba",R.drawable.creep_3),
                        new Promozione("Manuela","Arcuri",R.drawable.creep_4)};
       
        //people.
       
        //riempimento casuale della lista delle persone
        Random r=new Random();
        for(int i=0;i<5;i++){
                personList.add(people[r.nextInt(people.length)]);
        }
       
       
       
        //Questa è la lista che rappresenta la sorgente dei dati della listview
        //ogni elemento è una mappa(chiave->valore)
        ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
       
       
        for(int i=0;i<personList.size();i++){
                Promozione p=personList.get(i);// per ogni persona all'inteno della ditta
               
                HashMap<String,Object> personMap=new HashMap<String, Object>();//creiamo una mappa di valori
               
            personMap.put("image", p.getPhotoRes()); // per la chiave image, inseriamo la risorsa dell immagine
            personMap.put("name", p.getName()); // per la chiave name,l'informazine sul nome
            personMap.put("surname", p.getSurname());// per la chiave surnaname, l'informazione sul cognome
            data.add(personMap);  //aggiungiamo la mappa di valori alla sorgente dati
        }
       
       
        String[] from={"image","name","surname"}; //dai valori contenuti in queste chiavi
        int[] to={R.id.personImage,R.id.personName,R.id.personSurname};//agli id delle view
       
        //costruzione dell adapter
        SimpleAdapter adapter=new SimpleAdapter(
                        getApplicationContext(),
                        data,//sorgente dati
                        R.layout.promozione_item, //layout contenente gli id di "to"
                        from,
                        to);
       
        //utilizzo dell'adapter
        ((ListView)findViewById(R.id.listview_promozioni)).setAdapter(adapter);
       
        //list = (ListView)findViewById(R.id.listview_promozioni);
        //list.setOnItemClickListener(this);
       
        }
« Ultima modifica: 16 Novembre 2013, 16:23:35 CET da drucks87 »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problema async http client (loopj)
« Risposta #1 il: 15 Novembre 2013, 19:55:56 CET »
0
Sembra che il sistema prima popoli la listview senza aspettare che l'async task abbia finito.

Come potre ovviare a questo problema? Ho provato a popolare la list view nel onSuccess ma niente...

Prima di tutto postando il codice.  :-)
Altrimenti è dura immaginare dove è l'errore.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline drucks87

  • Utente junior
  • **
  • Post: 50
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei ideos
  • Play Store ID:
    drucks team
  • Sistema operativo:
    Windows 7
Re:Problema async http client (loopj)
« Risposta #2 il: 16 Novembre 2013, 16:24:03 CET »
0
post modificato.
aggiunto codice.

ciao