如何获取json对象中的相应键并将其放入我的recyclerView onBindViewHolder中

时间:2018-05-01 21:51:33

标签: android json android-recyclerview

我有一个json数组,jsonArray,如:

[{
        "phone_number": "+123456",
        "name": "Bob"
    },
    {
        "phone_number": "+234567",
        "name": "Tom"
    },
    {
        "phone_number": "+345678",
        "name": "Jim"
    },
    {
        "phone_number": "+4567890",
        "name": "Jane"
    },
    {
        "phone_number": "+5678901",
        "name": "Sally"
    }
]

在我的onBindViewHolder我想检查phone_number中的json array值与username是否匹配,然后是否匹配viewHolder.phone_user_name文本到json数组的"name"中的相应值。

但我在每个单元格的recyclerView中获得的只是user : (blank)

这是我到目前为止所尝试的内容:

@Override
    public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {

        SharedReview r = the_Shared_reviews.get(position);

        //username is in fact a phone number from the db
        String username = r.getUsername();

        String phone_user_name = "";

        int matching = jsonArray.length();
        for (int i = 0; i < matching; i++) {

            try {

                JSONObject object = jsonArray.getJSONObject(i);

                if (object.getString("phone_number").contains(username))

                {

                    phone_user_name = (object.getString("name"));
                }
            } catch (JSONException e) {
                Log.e("MYAPP", "unexpected JSON exception", e);
                // Do something to recover ... or kill the app.
            }
        }


            //I want to set the text to Bob, Tom, or whatever corresponding
            // phone number matches username
            ((ReviewHolder) viewHolder).phone_user_name.setText("user :" + phone_user_name);

            }

2 个答案:

答案 0 :(得分:0)

您应该创建一个对象列表(电话号码,名称)并将其绑定到回收站视图。在“onBindViewHolder()”中,您可以从列表中找到包含这两个字段的相应对象。

答案 1 :(得分:0)

我不确定在username变量下的SharedReview类中应该有什么值,但是我假设它是一个名字,而不是一个数字。

但是,您正在测试名为&#34; phone_number&#34;的json数组项,在您的示例中是实际电话号码,是否包含用户名。这绝对是一个名字。

你应该替换:

    if (object.getString("phone_number").contains(username))

            {

                phone_user_name = (object.getString("name"));
            }

使用:

    if (object.getString("name").equals(username))

            {

                phone_user_name = (object.getString("name"));
            }