Я пытаюсь сохранить дочерние данные expandablelistview в SharedPreferences
. Сохранение работает, но когда я пытаюсь загрузить его, я получаю ошибки.java.lang.String не может быть добавлен в com.example.expandablelistview.NewsItem
Проблема:
При попытке загрузить настройки и поместить его в HashMap я получаю эти ошибки (короткое замыкание на 3-х строк):
08-24 12:40:05.138: E/AndroidRuntime(807): FATAL EXCEPTION: main
08-24 12:40:05.138: E/AndroidRuntime(807): java.lang.ClassCastException: java.lang.String cannot be cast to com.example.expandablelistview.NewsItem
08-24 12:40:05.138: E/AndroidRuntime(807): at com.example.expandablelistview.ExpandableListAdapter.getChildView(ExpandableListAdapter.java:62)
Для сохранения данных я буду использовать этот код:
SharedPreferences pref = context.getSharedPreferences("myPrefs", MODE_PRIVATE);
SharedPreferences.Editor editor= pref.edit();
for(Entry<String, List<NewsItem>> entry : listDataChild.entrySet()) {
editor.putString(entry.getKey(), String.valueOf(entry.getValue())); // Save the values of listDataChild
}
editor.commit();
выход данных:
Yesterday: [[ headline=51.17346, 3.2252, Speed=2.10KM/H, Direction=158, date=18-8-2013 13:37:32]]
Older: [[ headline=51.74346, 3.23252, Speed=2.00KM/H, Direction=122, date=17-8-2013 11:40:30]]
Today: [[ headline=51.07346, 3.35252, Speed=0.00KM/H, Direction=122, date=19-8-2013 18:50:42]]
При попытке загрузить эти данные (ошибки здесь произошло) и поместить его в HashMap, я буду использовать это (from here):
for(Entry<String, ?> entry : pref.getAll().entrySet()) {
listDataChild.put(entry.getKey(), (List<NewsItem>) Arrays.asList(entry.getValue())); // Put it in listDataChild
}
Инициализация данных здесь случилось:
static void prepareListData(final Context context) {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<NewsItem>>();
// Adding child data
listDataHeader.add("Today");
listDataHeader.add("Yesterday");
listDataHeader.add("Older");
List<NewsItem> today = new ArrayList<NewsItem>();
NewsItem newsData = new NewsItem();
newsData.setHeadline("51.07346, 3.35252");
newsData.setSpeed("0.00KM/H");
newsData.setDirection("122");
newsData.setDate("19-8-2013 18:50:42");
today.add(newsData);
List<NewsItem> yesterday = new ArrayList<NewsItem>();
newsData = new NewsItem();
newsData.setHeadline("51.17346, 3.2252");
newsData.setSpeed("2.10KM/H");
newsData.setDirection("158");
newsData.setDate("18-8-2013 13:37:32");
yesterday.add(newsData);
List<NewsItem> older = new ArrayList<NewsItem>();
newsData = new NewsItem();
newsData.setHeadline("51.74346, 3.23252");
newsData.setSpeed("2.00KM/H");
newsData.setDirection("122");
newsData.setDate("17-8-2013 11:40:30");
older.add(newsData);
listDataChild.put(listDataHeader.get(0), today);
listDataChild.put(listDataHeader.get(1), yesterday);
listDataChild.put(listDataHeader.get(2), older);
}
пробовал попытки:
Я попытался изменить listdataChild.put
, чтобы загрузить данные в этом:
listDataChild.put(entry.getKey(), new ArrayList<NewsItem>((Collection<? extends NewsItem>) Arrays.asList(entry.getValue())));
И это:
listDataChild.put(entry.getKey(), (List<NewsItem>) new ArrayList(Arrays.asList(entry.getValue())));
Но без каких-либо результатов. (Я получил ту же ошибку)
Вопрос:
Можно ли преобразовать значения карты в список и поместить его в HashMap listDataChild
?
Или использовать newsData.setHeadline("Value");
, newsData.setSpeed("Value");
и т. Д.? (Я не знаю, как получить конкретные значения, что это в SharedPreferences
списке)
(Источник NewsItem.java
можно найти here, источник ExpandableListAdapter.java
можно найти here и источник MainActivity.java
можно найти here)
Я уверен, что версия 'ExpandableListAdapter', с которой вы связаны, не является * той, которую вы используете, поскольку приведение к' NewsItem' происходит в строке 62, а не 66 :( –
@JonSkeet Woops, я удалил несколько строк перед загрузкой. Теперь это действительно на линии 62. Спасибо, что заметили. :) – user1480019
Это не поможет вам не показать, где вы инициализируете «ExpandableListAdapter», либо .. –