在文件中添加新元素

时间:2017-04-23 13:34:02

标签: java android json gson

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

2 个答案:

答案 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”}],包含名称键的双引号。

应解决此问题。

感谢