Android: проблема с заполнением списка элементами из общих настроек

У меня есть простое приложение, которое просматривает комиксы и позволяет пользователю отмечать некоторые из них как «Избранные», к которым можно получить доступ позже (оно делает больше, но это все, что здесь имеет значение). Когда пользователь помечает комикс как Избранное, строка помещается в общие настройки с ключом формата = "# 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, когда пользователь нажимает эту кнопку?


person Sam Stern    schedule 02.01.2011    source источник


Ответы (1)


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

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

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

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

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

person ddewaele    schedule 02.01.2011
comment
Как пройти код? Я никогда не делал этого раньше. - person Sam Stern; 03.01.2011