Я пишу приложение для Android, где мне нужно вывести информацию о некоторых объектах в файл, чтобы он все еще присутствовал, когда пользователь закрывает приложение и т. Д. Я выводил эти объекты только как «имя», каждый со своим «значением». И только для предисловия, я очень новичок в разработке Java и Android, поэтому извиняюсь за любые глупые ошибки.Выход JSON в файл, затем введите его обратно в
Вот код, чтобы вывести 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, как должен? Любая помощь приветствуется.
Я немного смущен. Почему вы используете JSON в первую очередь? Похоже, вам не нужен JSON, поскольку во втором коде вы возвращаете список. – NoChinDeluxe
@drschultz, есть способ, который я могу вывести список непосредственно в файл, а затем ввести его как список? У меня создалось впечатление, что я могу только вывести какой-то JSON или XML. – youravgjoe
Да. Вы можете сохранить все типы данных! См. Мой ответ ниже. – NoChinDeluxe