Java 将用户的值列表保存到存储器,然后在列表中显示它们

Java 将用户的值列表保存到存储器,然后在列表中显示它们,java,android,listview,sharedpreferences,Java,Android,Listview,Sharedpreferences,我正在创建一个应用程序,它将转换用户输入,然后在文本视图中显示它。但我需要做的是显示最后5次转换。所以我想找出一个方法来做到这一点。最好的方法是获取用户的输入,然后将输入存储到某种类型的文件中并定位它吗?我是新来的,所以我可能完全错了,如果是的话,请有人告诉我另一种方法。下面的代码是获取用户输入的代码,然后将其转换并添加到TextView中,但我需要将其存储起来,以便显示最后5次转换 if (copper1Pressed && copper2Pressed) { conv

我正在创建一个应用程序,它将转换用户输入,然后在
文本视图中显示它。但我需要做的是显示最后5次转换。所以我想找出一个方法来做到这一点。最好的方法是获取用户的输入,然后将输入存储到某种类型的文件中并定位它吗?我是新来的,所以我可能完全错了,如果是的话,请有人告诉我另一种方法。下面的代码是获取用户输入的代码,然后将其转换并添加到
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);
    }
}

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

要保存:

final JSONArray array = new JSONArray();
array.put("string1");
array.put("string2");
final String jsonString = array.toString();
sharedPreferences.edit().put("data", jsonString).apply();
存储在SharedReferences中的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
,应该可以使用以下构造函数将其直接转换为JSONArray:

JSONArray(Collection copyFrom)
对不起,我没有在我的电脑前,否则我会自己试试

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


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

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

要保存:

final JSONArray array = new JSONArray();
array.put("string1");
array.put("string2");
final String jsonString = array.toString();
sharedPreferences.edit().put("data", jsonString).apply();
存储在SharedReferences中的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
,应该可以使用以下构造函数将其直接转换为JSONArray:

JSONArray(Collection copyFrom)
对不起,我没有在我的电脑前,否则我会自己试试

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


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

Hi Tayla。存储和检索学习项目数据的最简单方法是使用“SharedReferences”。如果你有开发一个完全聊天应用程序的野心,那么你可以考虑“MyLoad”,这是MySQL数据库的简化。最后,如果您希望数据托管在谷歌的云中,请访问Firebase实时数据库。关于您正在创建的视图。我喜欢你解决方案中的雄心壮志。但是,在代码中创建数量可变的视图时可能会遇到问题,因为在某些情况下,我们最终创建的视图超过了屏幕所能容纳的数量,而且速度很慢,内存效率也很低。另一方面,RecyclerView将在TextView中显示最后5条、10条或15条消息,但将TextView创建限制在屏幕上可容纳的TextView数量。在Studio“New->Fragment->Fragment List”中,它将为您创建一个用示例数据填充的RecyclerView列表。非常感谢@Elletlar,我一直在使用“SharedReferences”,但所有教程都显示了如何存储editText中的文本,但我想存储我的txtList中的数据。我该怎么办?没问题。你设法让它工作了吗?我在下面的答案中添加了一些示例代码。存储和检索学习项目数据的最简单方法是使用“SharedReferences”。如果你有开发一个完全聊天应用程序的野心,那么你可以考虑“MyLoad”,这是MySQL数据库的简化。最后,如果您希望数据托管在谷歌的云中,请访问Firebase实时数据库。关于您正在创建的视图。我喜欢你解决方案中的雄心壮志。但是,在代码中创建数量可变的视图时可能会遇到问题,因为在某些情况下,我们最终创建的视图超过了屏幕所能容纳的数量,而且速度很慢,内存效率也很低。另一方面,RecyclerView将在TextView中显示最后5条、10条或15条消息,但将TextView创建限制在屏幕上可容纳的TextView数量。在Studio“New->Fragment->Fragment List”中,它将为您创建一个用示例数据填充的RecyclerView列表。非常感谢@Elletlar,我一直在使用“SharedReferences”,但所有教程都显示了如何存储editText中的文本,但我想存储我的txtList中的数据。我该怎么办?没问题。你设法让它工作了吗?我在下面的答案中添加了一些示例代码。