mycode:
try {
FileInputStream inputStream1 = getActivity().openFileInput("filename");
BufferedReader b = new BufferedReader(new InputStreamReader(inputStream1));
StringBuilder total = new StringBuilder();
String line;
while ((line = b.readLine()) != null) {total.append(line);}
b.close();
inputStream1.close();
String json = total.toString();
Items oldItems = new Gson().fromJson(json,Items.class);
Items newItem = new Items();
newItem.setName(example.getName());
List<Items> items = new ArrayList<Items>();
items.add(oldItems);
items.add(newItem);
Gson gson = new Gson();
String itemsJson = gson.toJson(items);
try {
FileOutputStream outputStream = getActivity().openFileOutput("filename", getActivity().MODE_PRIVATE);
outputStream.write(itemsJson.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
try {
Items newItem = new Items();
newItem.setItem(example.getName());
Gson gson = new Gson();
String json = gson.toJson(newItem);
FileOutputStream outputStream = getActivity().openFileOutput("filename", getActivity().MODE_PRIVATE);
outputStream.write(json.getBytes());
outputStream.close();
} catch (Exception d) {
d.printStackTrace();
}
}
我正在尝试编写一个在文件中读写json的代码。我写这个没问题:
[{"name":"a"},{"name":"b"}]
但是当我尝试阅读它以添加新的“项目”时,我有一个错误。 我的想法是在点击按钮时添加一个新项目。 我不明白是什么问题以及如何解决这个问题。
Items.java
class Items implements Serializable {
@SerializedName("name")
@Expose
private String name;
public String getName() { return name;}
public void setName(String name) {
this.name = name;
}
}
EDIT 错误是这样的:
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException: 预期BEGIN_OBJECT但在第1行第2列路径$
处是BEGIN_ARRAY
答案 0 :(得分:1)
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
当您使用 GSON PARSER
时这对我来说很完美 -
String json = "[{\"name\":\"a\"},{\"name\":\"b\"}]";
List<Items> writenItems = new Gson()
.fromJson(json, new TypeToken<List<Items>>(){}.getType());
writenItems
.forEach($->
System.out.println("name: " + $.getName()));
答案 1 :(得分:0)
当您将json写入文件时,可以用这种格式编写吗?
[{“name”:“a”},{“name”:“b”}],包含名称键的双引号。
应解决此问题。
感谢