Ibu*_*ngo 2 java android hashset linkedhashset sharedpreferences
我有以下示例代码.应用程序第一次安装成功.但是,它会在重新安装时抛出错误.
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinkedHashSet<String> planets = new LinkedHashSet<String>();
planets.add("Earth");
SharedPreferences prefs = getPreferences(0);
prefs.edit().putStringSet("planets", planets).commit();
prefs = getPreferences(0);
planets = (LinkedHashSet<String>) prefs.getStringSet("planets", new LinkedHashSet<String>());
}
}
Run Code Online (Sandbox Code Playgroud)
我已经粘贴了重新安装以下应用程序时产生的错误.
Caused by: java.lang.ClassCastException: java.util.HashSet cannot be cast to java.util.LinkedHashSet at com.example.test.MainActivity.onCreate(MainActivity.java:12)
Run Code Online (Sandbox Code Playgroud)
我想了解为什么保存LinkedHashSet不能被归还给LinkedHashSet.为什么它会HashSet被Android自动转换为?
@Ibungo,我想你误会了SharedPreferences什么.你不能要求prefs保存一LinkedHashSet组 - 你只能要求它保存一般Set.作为回报,你可以Set在那之后得到一位将军.无法保证它将返回与您相同的集合实现.
首选项只是迭代您给出的项目集,并将它们写入应用程序的XML存储区.因此,当您要求这些项目时,它正在读取XML并创建一个新的Set - HashSet因为它是最常用的一个.
LinkedHashSet我能想到的唯一原因是你想要保留插入顺序.如果是这样的话,你可以尝试转换您的收藏ArrayList和存储它-有一个例子在这里.或者,您可以将数据保存到a JSONArray并将其存储为String.
| 归档时间: |
|
| 查看次数: |
2967 次 |
| 最近记录: |