Android: проблема с заполнением списка просмотра элементами из общих настроек - PullRequest
0 голосов
/ 02 января 2011

У меня есть простое приложение, которое просматривает комиксы и позволяет пользователю пометить некоторые из них как «Избранное», к которым можно получить доступ позже (это делает больше, чем это, но это все, что здесь уместно). Когда пользователь помечает комикс в качестве избранного, в общие настройки помещается строка с ключом формата = "# of Comic" Value = "title of Comic". SharedPreferences не содержит ничего, кроме пар ключ / значение, связанных с любимыми комиксами. Эта функциональность работает отлично. Проблема возникает с кнопкой меню, которую я реализовал, что я намеревался показать ListView, содержащий значения всех избранных, хранящихся в файле SharedPreferences. Вот код действий, выполняемых, когда пользователь нажимает кнопку «Избранное» во всплывающем меню

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

Каждый раз, когда я запускаю это, я получаю Force Close. Я даже не вижу, как «Шаг 2» появляется в журнале. Игнорируя тот факт, что это, вероятно, не красивый или эффективный код, почему я получаю ошибку Force Close, когда пользователь нажимает эту кнопку?

1 Ответ

2 голосов
/ 02 января 2011

Принудительное закрытие обычно является результатом исключения во время выполнения где-то в вашем приложении.

Это исключение должно быть видно в журналах.Если вы используете Eclipse / ADT, перейдите в перспективу DDMS и посмотрите в представление logcat.(Я предполагаю, что вы можете легко воспроизвести ошибку).

Вы должны увидеть трассировку стека.Изучите трассировку стека и попытайтесь найти, где она пошла не так.Это может быть что угодно, от NullPointerException до другого RuntimeException.

Кроме того, попробуйте установить точку останова на точку останова «Шаг 1».Запустите ваше приложение в режиме отладки и пошагово пройдитесь по коду.В какой-то момент в стеке вы точно увидите, когда и почему приложение закрывается с принудительным закрытием.

Если вы никогда не использовали функции отладки Eclipse, см. Следующую ссылку: http://www.vogella.de/articles/EclipseDebugging/article.html

...