Android: Problema popolamento ListView con articoli da Preferenze condivise
-
14-10-2019 - |
Domanda
Ho una semplice applicazione che viste fumetti e permette all'utente di marcare alcuni come "Preferiti", che si può accedere successivamente (lo fa più di questo, ma questo è tutto ciò che è rilevante qui). Quando gli indicatori di utente un fumetto come preferito, una stringa è messo alle preferenze condivise con il formato chiave = "# di Comic" value = "titolo di Comic". I SharedPreferences contiene altro che coppie chiave / valore associati a fumetti preferiti. Questa funzionalità funziona bene. Il problema si pone con un pulsante del menu ho implementato che avevo intenzione di mostrare un ListView che contiene i valori di tutti i preferiti memorizzati nel file SharedPreferences. Ecco il codice per le azioni eseguite quando l'utente fa clic sul pulsante Preferiti nel menu a comparsa
case R.id.favorites:
Log.i("Step 1", "Favorites");
favVector.clear(); //Clears string Vector that I want to use to hold the titles
Map<String, ?> allprefs = xkfav.getAll(); //gets map of all Shared Preferences
for (Map.Entry<String, ?> entry : allprefs.entrySet()) {
favVector.add((String) entry.getValue());
}
Log.i("Step 2", "Favorites");
setContentView(R.layout.favlist); //loads Layout with ListView (and nothing else)
Log.i("Step 3", "Favorites");
ListView menuList;
menuList = (ListView) findViewById(R.id.FavListView);
String[] items = new String[favVector.size()]; //creates array with size of Vector
favVector.copyInto(items); //Copies Vector into array
ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.fav_item, items);
menuList.setAdapter(adapt); //Puts array contents into list
Ogni volta che corro questo, ottengo una Forza Chiudi. Non ho mai nemmeno vedere "Fase 2" visualizzato nel registro. Ignorando il fatto che questo probabilmente non è bello o codice efficiente, perché ottengo l'errore Forza Chiudi quando l'utente fa clic su questo pulsante?
Soluzione
Una forza di chiusura è di solito il risultato di un runtime un'eccezione da qualche parte nella tua app.
Questa eccezione deve essere visibile nei registri. Se si utilizza Eclipse / ADT, andare alla prospettiva DDMS e sguardo nella vista logcat. (Presumo si può riprodurre l'errore facilmente).
Si dovrebbe vedere una stacktrace. Indagare sulla stacktrace e cercare di trovare dove è andata male. Questo potrebbe essere qualsiasi cosa, da un NullPointerException ad un altro RuntimeException.
Inoltre, prova a mettere un punto di interruzione il punto di interruzione "Fase 1". Inizia la tua applicazione in modalità debug e passo attraverso il codice. Ad un certo punto nella pila, si vedrà esattamente quando e perché le uscite di applicazione con una forza di chiusura.
Se non hai mai usato le funzionalità di debug di Eclipse, consultare il seguente link: http://www.vogella.de/articles/EclipseDebugging/article.html