Autore Topic: Refresh ListView  (Letto 590 volte)

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
Refresh ListView
« il: 13 Giugno 2013, 22:47:48 CEST »
0
ciao a tutti!
sto cercando di capire come fare il refresh di una ListView.
quando avvio la app richiamo questo:
Codice: [Seleziona]
        private void setLista() {
                try {
                        listView = (ListView) findViewById(R.id.lista_articoli);
                        JSONArray jsonArray = new JSONArray(JsonFile.read(path + "blog_articoli.json"));
                        for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject jo = jsonArray.getJSONObject(i);
                                HashMap<String, String> map = new HashMap<String, String>();
                                map.put("id", jo.getString("id"));
                                map.put("titolo", jo.getString("titolo"));
                                map.put("creazione", jo.getString("creazione"));
                                map.put("modifica", jo.getString("modifica"));
                                map.put("count", jo.getString("count"));
                                list.add(map);
                        }
                        adapter = new SimpleAdapter(this, list, R.layout.rows,
                                        new String[] { "titolo", "creazione", "modifica", "count" },
                                        new int[] { R.id.titolo, R.id.creazione, R.id.modifica, R.id.count });
                        listView.setAdapter(adapter);
                } catch (JSONException e) {
                } catch (Exception e) {
                }
        }
fin qui ok.
i dati li prendo da un file json salvato in locale.
quando clicco sulla voce di menu, scarico di nuovo il file e e ricarico tutto:
Codice: [Seleziona]
list.clear(); // CANCELLO L'ArrayList
new DownloadDatas().execute(""); // RICREO IL FILE
setLista(); // RISETTO LA LISTA
adapter.notifyDataSetChanged();
solo che la listview si ricarica solo al second click sul menu.
sapete il perchè??

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
Re:Refresh ListView
« Risposta #1 il: 16 Giugno 2013, 16:01:39 CEST »
0
forse ho capito dove sia il problema.
in pratica riempio un file con dati in formato json presi dal web.
devo cliccare due volte sul menu perchè i dati nel file si aggiornino.
Codice: [Seleziona]
        public static String read(String strFile) throws IOException {
                File file = new File(strFile);
                StringBuilder sb = new StringBuilder();
                if(file.exists()) {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
                        String line = null;
                        while ((line = reader.readLine()) != null) {
                                sb.append(line).append("\n");
                        }
                        reader.close();
                }
                System.out.println(sb.toString());
                return sb.toString();
        }
anche se poi i dati che escono fuori dal db sono cambiati, e quindi in teoria anche quelli che arrivano al file.
questo il metodo che prende i dati dal web:
Codice: [Seleziona]
        public InputStream getArticoli(String phpFile) throws ClientProtocolException, IOException, JSONException {
                HttpClient client = new DefaultHttpClient();
                HttpPost post = new HttpPost(remote + phpFile);
                HttpResponse response = client.execute(post);
                HttpEntity entity = response.getEntity();
                return entity.getContent();
        }
possibile un problema di cache?

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Refresh ListView
« Risposta #2 il: 16 Giugno 2013, 16:40:17 CEST »
+1
Codice (Java): [Seleziona]
new DownloadDatas().execute(""); // RICREO IL FILE
setLista(); // RISETTO LA LISTA
adapter.notifyDataSetChanged();
se lanci un asynctask, in teoria dovresti aspettare che finisca... quindi il setLista() e il notifydataset devi chiamarli nel onPostExecute del tuo asynctask :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
Re:Refresh ListView
« Risposta #3 il: 16 Giugno 2013, 17:08:35 CEST »
0
si hai perfettamente ragione.
nn ci avevo pensato.
adesso funziona.
grazie!!

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Refresh ListView
« Risposta #4 il: 16 Giugno 2013, 17:56:38 CEST »
0
C'è il tasto thanks per ringraziare per un post utile :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline fermat

  • Utente junior
  • **
  • Post: 93
  • Respect: +1
    • Mostra profilo
    • Mattepuffo.com
Re:Refresh ListView
« Risposta #5 il: 16 Giugno 2013, 18:17:28 CEST »
0
C'è il tasto thanks per ringraziare per un post utile :)
non ne ero a conoscenza.
cmq fatto!!  :-)