Autore Topic: Mi chiede di fare adapter.notifyDataSetChanged() anche se correttamente(?) fatto  (Letto 800 volte)

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Ragazzi ho un problema... la mia app è conposta da una  List View, ho inoltre un pulsante che mi serve per aggiornare i dati, quando lo clicco, alcune volte (prima stranezza) mi dal'errore "java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131099657, class android.widget.ListView) with Adapter(class com.example.risultatilive.ui.RisArrayAdapter)]"
questa è la mia classe:

Codice (Java): [Seleziona]
listaRis.addAll(li);
               

                runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                                String giornata = ris.getGiornata();
                                setAaa(giornata);
                                int gior;
                                try {
                                        gior = Integer.parseInt(giornata);
                                } catch (NumberFormatException ex) {
                                        gior = -1;
                                }
                                selector.setSelection(gior - 1, false);
                                selector.setOnItemSelectedListener(RisultatiActivity.this);
                                if (arrayAdapter != null)
                                        arrayAdapter.notifyDataSetChanged();
                                p.dismiss();
                                tvv.setText(gs.getOra());
                                if (li.isEmpty()) {
                                        Toast.makeText(RisultatiActivity.this,
                                                        "Errore di connessione", Toast.LENGTH_SHORT).show();
                                }
                        }
                });

        }

cosa può essere l'errore??

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
0
L'errore è esattamente quello che c'è scritto:

java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.

A me sembra invece che fai un po' di operazioni in un thread separato.

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
0
cioè dovrei fare listaRis.addAll(li); nel runOnUiThread? alla fine è questo che modifica l'adapter...
      

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
0
Tutte le modifiche che riguardano elementi delle UI devono essere fatti nel thread della UI.
Ti consiglio di usare un AsyncTask in modo da rendere più facile il passaggio da background thread a UI thread.

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
0
OK grazie mille della risposta ora provo... ma perchè accadeva solo ogni tanto e non sempre?