【问题标题】:Save a list of values from a user to storage then display them in a list将用户的值列表保存到存储中,然后将它们显示在列表中
【发布时间】:2020-11-20 17:20:48
【问题描述】:

我正在创建一个应用程序,它将转换用户输入,然后将其显示在 TextView 中。但我需要做的是显示最后 5 次转换。所以我试图找出一种方法来做到这一点。最好的方法是获取用户的输入,然后将输入存储到某种类型的 this 中并定位它吗?我是新手,所以我可能完全错了,如果是这样,有人可以告诉我另一条路线。下面的代码是获取用户输入然后将其转换并添加到TextView 的代码,但我需要将其存储起来,以便显示最后 5 次转换

if (copper1Pressed && copper2Pressed) {
    convertedCost.setText("Converted cost: " + convert);

    myList.add(editText.getText().toString());
    myList.add(convertedCost.getText().toString());
    editText.setText("");
    String string1 = "Copper";
    String string2 = "Copper";
    for(String edit : myList) {
        edit = (string1 + " " + myList.get(0) + " = " + string2 + " " + myList.get(1));
        txtList.setText(edit);
    }
}

【问题讨论】:

  • 嗨泰拉。为学习项目存储和检索数据的最简单方法是使用“SharedPreferences”。如果您有开发完整聊天应用程序的雄心,那么您可能会考虑“Room”,它是 MySQL 数据库的简化版。最后,如果您希望将数据托管在 Google 的云中,请使用 Firebase 实时数据库。
  • 关于您正在创建的视图。我喜欢你解决方案中的雄心壮志。但是您可能会遇到在代码中创建可变数量的视图的问题,因为在某些情况下,我们最终创建的视图超出了屏幕可以容纳的数量,并且变得缓慢且内存效率低下。另一方面,RecyclerView 将在 TextView 中显示最后 5、10 或 15 条消息,但会将 TextView 创建限制为屏幕上可以容纳的 TextView 数量。在 Studio 中,“新建 -> 片段 -> 片段列表”,它将为您创建一个 RecyclerView 列表,其中填充了示例数据。
  • 非常感谢@Elletlar 我一直在使用“SharedPrefrences”但是所有的教程都展示了如何存储来自editText的文本,但我想存储我的数据txt列表。我该怎么办?
  • 没问题。你设法让它工作吗?我在答案下面添加了一些示例代码。

标签: java android listview sharedpreferences


【解决方案1】:

不幸的是,SharedPreferences 没有提供一种简单的方法来存储有序列表。一个“标准”的 Android 开发技巧是使用 JSON 数组来代替:

保存:

final JSONArray array = new JSONArray();
array.put("string1");
array.put("string2");
final String jsonString = array.toString();
sharedPreferences.edit().put("data", jsonString).apply();

SharedPreferences中存储的jsonString的值为:

(string1,string2)

检索:

final String stringData = sharedPreferences.getString("data");
final JSONArray jsonArray = new JSONArray(stringData);
final String string1 = jsonArray.getString(0);
final String string2 = jsonArray.getString(1);

我假设 myList 的类型为 List<String>,应该可以使用以下构造函数将其直接转换为 JSONArray:

JSONArray(Collection copyFrom)

对不起,我不在电脑前,否则我会自己尝试...

这是一个简单的示例,但您也可以存储 JSONObject 字符串数组,例如,如果您决定将另一条数据与您的聊天消息(可能是时间戳)相关联。

但对于真正的商业产品,您通常应该使用数据库而不是将 JSONObjects 作为字符串存储在 SharedPreferences 中,因为您可能希望对数据运行有效的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2021-06-28
    • 1970-01-01
    • 2021-07-05
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多