简体   繁体   中英

RecyclerView does not show anything

I want to show my json response with a RecyclerView but it's showing nothing! here is my json :

[
  {
    "key": "test",
    "vals": [
      {
        "Id": 0,
        "Group": "test",
        "Type": 0,
        "Name": "ram",
        "Value": "8",
        "Sort": 2
      },
      {
        "Id": 0,
        "Group": "test",
        "Type": 0,
        "Name": "cpu",
        "Value": "2.4",
        "Sort": 1
      }
    ]
  },
  {
    "key": "mobile",
    "vals": [
      {
        "Id": 0,
        "Group": "mob",
        "Type": 0,
        "Name": "camera",
        "Value": "8",
        "Sort": 5
      },
      {
        "Id": 0,
        "Group": "mob",
        "Type": 0,
        "Name": "cpu",
        "Value": "4",
        "Sort": 0
      },
      {
        "Id": 0,
        "Group": "mob",
        "Type": 0,
        "Name": "Ram",
        "Value": "4",
        "Sort": 0
      }
    ]

and here is my Java code :

JSONObject jsonObject = new JSONObject(s);
JSONArray array = jsonObject.getJSONArray("key");

for(int i=0;i<array.length();i++) {
JSONObject o = array.getJSONObject(i);
ListItem_spec item = new ListItem_spec(o.getString("id"),o.getString("group"),o.getString("type"),o.getString("name"),o.getString("value"),o.getString("sort"),o.getString("key"));
listItems.add(item);
}
adapter = new MyAdapter_spec(listItems,getContext());
recyclerView.setAdapter(adapter);

How can i fix this?

You are trying to parse such structure:

{
  "key": [
    {
    "id": 0,
    "group": "test",
    "type": 0,
    "name": "ram",
    "value": "8",
    "sort": 2,
    "key": "someKey"
  },
  ...
  ]
}

But you have anouther json structure. Try this code:

JSONArray array = new JSONArray(s);

for(int i=0; i < array.length(); i++) {
  JSONObject valsObj = array.getJSONObject(i);
  JSONArray valsArray = valsObj.getJSONArray("vals");

  String key = valsObj.getString("Key");

  for(int j=0; j < valsArray.length; j++) {
    JSONObject o = valsArray.getJSONObject(j);
    ListItem_spec item = new ListItem_spec(o.getString("Id"), o.getString("Group"), o.getString("Type"), o.getString("Name"), o.getString("Value"), o.getString("Sort"), key);
    listItems.add(item);
   }
}

adapter = new MyAdapter_spec(listItems, getContext());
recyclerView.setAdapter(adapter);

您是否已将布局管理器附加到回收者视图?

if you want to use Gson.. you can implement like this

Create Model

public class ListItem_spec{
    private List<Vals> vals;
    private String key;

    public List<Vals> getVals (){
        return vals;
    }

    public String getKey (){
        return key;
    }
}


public class Vals
{
    private String Name;
    private String Sort;
    private String Value;
    private String Type;
    private String Id;
    private String Group;
    public String getName (){
        return Name;
    }

    public String getSort (){
        return Sort;
    }

    public String getValue (){
        return Value;
    }

    public String getType (){
        return Type;
    }

    public String getId (){
        return Id;
    }

    public String getGroup (){
        return Group;
    }
}

then use Gson()

List< ListItem_spec > listItems = new Gson().fromJson(YOUR_JSON,new TypeToken<List<ListItem_spec>>(){}.getType());

adapter = new MyAdapter_spec(listItems, getContext());
recyclerView.setAdapter(adapter);
//dont forget to add notifyDataSetChanged();
adapter.notifyDataSetChanged();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM