我是Android开发的新手,我将非常感谢我能得到的任何帮助。
我正在设计一个应用程序,在某些时候需要询问用户他的朋友的名字,以便稍后使用这些名称,即这些名称将用于下拉列表并将在单独显示图。
我的问题是:有效存储这些名称然后能够访问它们以进行阅读,编辑和删除的最佳方法是什么?名称数量不会很大(最多20个项目)。
回应有关添加更多信息的评论:
我需要用户指定将在2个不同的Android活动中使用的名称(字符串)列表: 1)此名称列表将在Spinner中使用,Spinner是申请表的一部分 2)此名称列表将用于单独的活动,该活动旨在操作(编辑和删除)现有项目并添加新项目。
我还需要在操作(编辑,删除和创建新项目)后使用此列表更改在两个活动中进行。用户退出应用程序后,此列表应该可用,因此据我所知,它应该存储在内部存储中的某个位置。
答案 0 :(得分:1)
你有很多选择,但我会给你两个选择:
SharedPreferences
SQLLite
如果它是暂时的并且不需要强烈的数据处理,我会选择SharedPreferences
,因为它更容易设置,易于使用和回收。
答案 1 :(得分:1)
如果您只存储20个项目,最好的方法是编写和读取文件。
public void writeItems(String fileName) {
final String ls = System.getProperty("line.separator");
BufferedWriter writer = null;
try {
writer =
new BufferedWriter(new OutputStreamWriter(openFileOutput(fileName,
Context.MODE_PRIVATE)));
writer.write("Item 1" + ls);
writer.write("Item 2" + ls);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void readItems(String fileName) {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(openFileInput(fileName)));
String line;
while ((line = input.readLine()) != null) {
//do something
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (input != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
openFileInput
和openFileOutput
参考:http://developer.android.com/reference/android/content/Context.html#openFileInput(java.lang.String)
答案 2 :(得分:1)
我讨厌当人们通过发布文档链接来回答问题时,我不会这样做。
我会将链接发布到文档并提供答案:
DOCS:http://developer.android.com/guide/topics/data/data-storage.html (这实际上是一个很好的阅读,不会太长,很好知道你的选择是什么)。
在我看来你需要保存一个ArrayList或者其他东西,并且你说20个名字将是最大数量,所以我会说你有3个可行的选项,我在这里提出,按照简单的升序排序我作为比较人的拙见:
1- InternalStorage
2- SharedPreferences
3-我在研究其中一个选项时发现的非常有趣的方式可以帮到你,当我需要保存一小部分数据时,我肯定会使用它...
< / p>
所以我要推荐的步骤是:将名称放在你最喜欢的集合对象(ArrayList,HashSet等)中,然后参考上面引用的方法的那些例子,相应的:
1 - https://stackoverflow.com/a/22234324/367342(是的,这是这个帖子上给出的答案的链接,我投了票,我觉得现在作弊更好。)
2 - Save ArrayList to SharedPreferences
3 - https://stackoverflow.com/a/5703738/367342&lt; - 此
- 将数据转换为JSONObject
- 将其转换为字符串
- 使用共享首选项保存此字符串
- 稍后阅读它作为jsonobject
示例3(未经测试,抱歉):
//Convert the ArrayList to json:
JSONObject json = new JSONObject();
json.put("uniqueArrays", new JSONArray(items));
//Make it into a string
String myLittleJason = json.toString();
//save it to the shared preferences
PreferenceManager.getDefaultSharedPreferences(context).edit().putString("KEY_TO_THE_NAMES_OF_MY_DEAR_FRIENDS", myLittleJason).commit();
//Loading it back from the preferences
String loadedJsonString = PreferenceManager.getDefaultSharedPreferences(context).getString("KEY_TO_THE_NAMES_OF_MY_DEAR_FRIENDS", "I have no friends, this is the default string returned if the key was not found, so, jokes aside, better make this a empty JSON string");
//making it into a JSON again
JSONObject loadedJson = new JSONObject(loadedJsonString);
//Converting the Json back into a ArrayList
ArrayList items = loadedJson.optJSONArray("uniqueArrays");
我喜欢JSON方法,如果您也喜欢它,请赞成原始(也是;))https://stackoverflow.com/a/5703738/367342