- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试将 expandablelistview 子数据保存到 SharedPreferences
.保存工作正常,但当我尝试加载它时出现错误。
问题:
当尝试加载设置并将其放入 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 )
最佳答案
您需要将从 SharedPreferences
返回的 String
以某种方式转换为 NewsItem
列表。仅靠类型转换是做不到的。
关于java.lang.String 无法转换为 com.example.expandablelistview.NewsItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18417923/
我正在尝试将 expandablelistview 子数据保存到 SharedPreferences .保存工作正常,但当我尝试加载它时出现错误。 问题: 当尝试加载设置并将其放入 HashMap 时
首先我有一个转发器,我正在输出一个属性。我都试过了 和 我有一个简单的类 public class NewsItem { public string Link = ""; p
我是一名优秀的程序员,十分优秀!