gpt4 book ai didi

java - 将 JSON 输出到文件,然后将其输入回

转载 作者:行者123 更新时间:2023-12-01 11:04:29 25 4
gpt4 key购买 nike

我正在为 Android 编写一个应用程序,我需要将一些对象的信息输出到文件中,以便当用户关闭应用程序等时它仍然存在。目前,我只将这些对象作为字符串输出“名称”,每个都有自己的“值(value)”。作为序言,我对 Java 和 Android 开发非常陌生,因此对于任何愚蠢的错误我深表歉意。

以下是输出 JSON 的代码:

public static String outputFile(FileOutputStream out, String name, List<String> values)
{
String outputString = "";
outputString += "\"meals\":[\n";

for (int i = 0; i < values.size(); i++)
{
outputString += "{\"" + name + "\": \"" + values.get(i) + "\"},\n"; //output: {"name":"value"}, for every element
}
outputString = outputString.substring(0, outputString.length()-2); //this takes off the newline char, and the last comma.
outputString += "\n"; //add the newline character back on.
outputString += "]";

Gson g = new Gson();
String s = g.toJson(outputString);

try
{
out.write(s.getBytes());
out.close();
}
catch (Exception e)
{
e.printStackTrace();
}

return outputString; //debug only
}

然后,我使用它来输入 JSON 并用其各自的值解析每个对象:

public static List<String> inputFile(Context context, FileInputStream in, List<String> names)
{
InputStreamReader inReader = new InputStreamReader(in);
BufferedReader bufferedReader = new BufferedReader(inReader);
StringBuilder builder = new StringBuilder();
String line;
String tempJson = "";

List<String> tempList = new ArrayList<>();

try
{
while ((line = bufferedReader.readLine()) != null)
{
builder.append(line);
String readJson = builder.toString();
Gson readGson = new Gson();
tempJson = readGson.fromJson(readJson, String.class);
}
in.close(); //close the file here?


JSONObject jobj = new JSONObject(tempJson);

for (int i = 0; i < names.size(); i++)
{
tempList.add(jobj.getString(names.get(i))); //this should add the JSON string stored at every index i in names.
}

//debug:
Toast.makeText(context, tempList.toString(), Toast.LENGTH_LONG).show();

return tempList;
}
catch (Exception e)
{
e.printStackTrace();

//debug:
Toast.makeText(context, tempList.toString(), Toast.LENGTH_LONG).show();

return new ArrayList<>(Arrays.asList("File Input Error!")); //return a blank-ish list?
}
}
}

所以我确信有一种更简单的方法可以做到这一点。也许我没有像我应该的那样使用 gson ?非常感谢任何帮助。

最佳答案

如果您只需要将列表存储到磁盘以供以后使用,这里有一个非常简单的方法。

假设您有一个要存储的字符串 ArrayList:

ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("one");
arrayList.add("two");
arrayList.add("three");

您可以轻松地将它们存储在应用的 SharedPreferences 中,它们并不是真正的用户首选项,而只是键/值槽,可以轻松访问以供您使用持久数据。您不能直接存储 ArrayList,但可以存储 Set,因此我们首先需要将 ArrayList 转换为可序列化 Set:

HashSet<String> hashSet = new HashSet<>(arrayList);

然后我们获取应用的 SharedPreferences 实例并将新的 HashSet 保存到磁盘:

SharedPreferences sharedPreferences = getSharedPreferences("whatever_you_want_to_name_this", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putStringSet("name_of_the_preference_to_modify", hashSet);
editor.apply();

就是这样!当您准备好检索数据时,您需要首先获取您保存的 HashSet:

SharedPreferences sharedPreferences = getSharedPreferences("whatever_you_want_to_name_this", MODE_PRIVATE);
HashSet<String> hashSet = (HashSet<String>) sharedPreferences.getStringSet("name_of_the_preference_to_modify", new HashSet<String>());

然后简单地将其转换回 ArrayList:

ArrayList<String> arrayList = new ArrayList<>(hashSet);

我认为这是保存列表的一种非常简单和干净的方法。而且您不必弄乱所有的 JSON。希望对您有帮助!

关于java - 将 JSON 输出到文件,然后将其输入回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33087251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com