存储用户输入数据以供以后工作的最佳方法

时间:2014-03-06 19:33:00

标签: android

我是Android开发的新手,我将非常感谢我能得到的任何帮助。

我正在设计一个应用程序,在某些时候需要询问用户他的朋友的名字,以便稍后使用这些名称,即这些名称将用于下拉列表并将在单独显示图。

我的问题是:有效存储这些名称然后能够访问它们以进行阅读,编辑和删除的最佳方法是什么?名称数量不会很大(最多20个项目)。

回应有关添加更多信息的评论:

我需要用户指定将在2个不同的Android活动中使用的名称(字符串)列表: 1)此名称列表将在Spinner中使用,Spinner是申请表的一部分 2)此名称列表将用于单独的活动,该活动旨在操作(编辑和删除)现有项目并添加新项目。

我还需要在操作(编辑,删除和创建新项目)后使用此列表更改在两个活动中进行。用户退出应用程序后,此列表应该可用,因此据我所知,它应该存储在内部存储中的某个位置。

3 个答案:

答案 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();
    }
    }
  }
} 

openFileInputopenFileOutput参考: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