首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JsonReader读取JSON数组

使用JsonReader读取JSON数组
EN

Stack Overflow用户
提问于 2017-03-21 10:48:48
回答 2查看 810关注 0票数 0

我使用JsonWrite和JsonReader开发了一个安卓应用程序。这是我的Json数组

代码语言:javascript
复制
[StudentListModel{rowId='1', userId='User1', userName='Vijil'}, StudentListModel{rowId='2', userId='User2', userName='Dhas'}] 

这是我的密码

代码语言:javascript
复制
private ArrayList<StudentListModel> readUser(JsonReader reader) throws IOException {
        String rowId = null;
        String userId = null;
        String userName = null;
        StudentListModel model = null;
        ArrayList<StudentListModel> userList = new ArrayList<>();
        reader.beginObject();
        while (reader.hasNext()) {
            String name = reader.nextName();
            if (name.equals("rowId")) {
                rowId = reader.nextString();
            } else if (name.equals("userId")) {
                userId = reader.nextString();
            } else if (name.equals("userName")) {
                userName = reader.nextString();
            } else {
                reader.skipValue();
            }
            model = new StudentListModel(rowId, userId, userName);
        }
        userList.add(model);
        reader.endObject();
        return userList;
    }

上面的代码只返回第二个列表(下面的列表),而不是全部。

代码语言:javascript
复制
StudentListModel{rowId='2', userId='User2', userName='Dhas'}

我在循环部分有个错误,请帮我把这个拿出来。

现在我修正了下面的代码:

代码语言:javascript
复制
boolean isRowAdded = false, isIdAdded = false, isNameAdded = false;
while (reader.hasNext()) {
            String name = reader.nextName();
            if (name.equals("rowId")) {
                rowId = reader.nextString();
                isRowAdded = true;
            } else if (name.equals("userId")) {
                userId = reader.nextString();
                isIdAdded = true;
            } else if (name.equals("userName")) {
                userName = reader.nextString();
                isNameAdded = true;
            } else {
                reader.skipValue();
            }
            model = new StudentListModel(rowId, userId, userName);

            if (isRowAdded && isIdAdded && isNameAdded) {
                userList.add(model);
                /**
                 * reset insitial status for next iteration
                 */
                isRowAdded = false;
                isIdAdded = false;
                isNameAdded = false;
            }
        }

现在工作正确,但我不知道以后我会面临什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2017-03-21 10:51:18

解析完所有数组后,将模型添加到用户列表中。因此,您只添加了解析的最后一个值。只需将userList.add(模型)调用移动到循环即可。

票数 0
EN

Stack Overflow用户

发布于 2017-03-21 10:55:02

代码语言:javascript
复制
while (reader.hasNext()) {
        String name = reader.nextName();
        if (name.equals("rowId")) {
            rowId = reader.nextString();
        } else if (name.equals("userId")) {
            userId = reader.nextString();
        } else if (name.equals("userName")) {
            userName = reader.nextString();
        } else {
            reader.skipValue();
        }
        model = new StudentListModel(rowId, userId, userName);

 userList.add(model);

    }

粘贴此代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42924922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档