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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top