2011-01-02 2 views
0

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

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, когда пользователь нажимает эту кнопку?

ответ

2

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

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

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

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

Если вы никогда не использовали возможности отладки Eclipse, обратитесь к следующей ссылке: «? Пошагово код» http://www.vogella.de/articles/EclipseDebugging/article.html

+0

Как Я никогда этого не делал раньше. –

+0

См. Обновленный ответ – ddewaele

Смежные вопросы