如何在 recyclerview 适配器中填充这些数据?

Posted

技术标签:

【中文标题】如何在 recyclerview 适配器中填充这些数据?【英文标题】:How to populate this data in recyclerview adapter? 【发布时间】:2021-06-10 04:07:11 【问题描述】:

我知道如何处理这种响应

[
        
            “id": "1027",
            “name”: “abcd”,
            "age”: “30”
         ,
        
            “id”: "713",
            "name": "xyz”,
            “age”: “31”
        
]

我是这样做的:

Call<List<info>> call = apiInterface.getInfo(id);
            call.enqueue(new Callback<List<info>>() 

                @Override
                public void onResponse(Call<List<info>> call, Response<List<info>> response) 

                    myList = response.body();
                    myAdapter = new coursesAdapter(myList, context);
                    recyclerview.setAdapter(myAdapter);
                

                @Override
                public void onFailure(Call<List<info>> call, Throwable t) 
                    Toast.makeText(context, t.getMessage(), Toast.LENGTH_LONG).show();
                
            );

但这是我得到的 json 响应:


    "catalogue": [
        
            “id": "1027",
            “name”: “abcd”,
            "age”: “30”
         ,
        
            “id”: "713",
            "name": "xyz”,
            “age”: “31”
        
]

如何在我的 recyclerview 中填充此响应,或者如何删除目录并直接访问我的 recyclerview 的内部列表。

我们将不胜感激和感谢任何帮助。谢谢。

【问题讨论】:

【参考方案1】:

您的适配器将保持不变。你只需要改变解析逻辑。

Call<YourObj> call = apiInterface.getInfo(id);
    call.enqueue(new Callback<YourObj>() 

        @Override
        public void onResponse(Call<YourObj> call, Response<YourObj> response) 

            YourObj reponse = response.body();
            myAdapter = new coursesAdapter(reponse.info, context);
            recyclerview.setAdapter(myAdapter);
        

        @Override
        public void onFailure(Call<List<info>> call, Throwable t) 
            Toast.makeText(context, t.getMessage(), Toast.LENGTH_LONG).show();
        
    );
    
            

您的 Pojo 类应如下所示,根据您的要求对您的 pojo 类进行必要的更改。

public class Info 

    @SerializedName("id")
    public String id;
    
    @SerializedName("name")
    public String name;
    
    @SerializedName("age")
    public String age;




public class YourObj 

    @SerializedName("catalogue")
    public List<Info> info = null;

【讨论】:

这里有问题,Call call = apiInterface.getInfo(id); call.enqueue(new Callback() 我没有收到回复。 有什么问题? 我得到了这个 java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on an null object reference 所以我调试并意识到执行即将到来出调用方法。我认为这个 Call 调用有问题 如果 id 没有数据,则 json 返回 "catalogue": false 。当我尝试传递该 ID 时,相同的调用函数给出此失败消息 java.lang.IllegalStateException:Expected BEGIN_ARRAY 但在第 1 行第 20 列路径 $.catalogue 或者 pojo 类也可能有问题

以上是关于如何在 recyclerview 适配器中填充这些数据?的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView 中最后一个子项的边距/填充

FirebaseRecyclerAdaptor 不会填充 recyclerview

cursor 第一次为空,recyclerView 不显示游标数据

如何为从 Firestore 填充的 RecyclerView 实现过滤器?

在 RecyclerView 适配器 notifyDataSetChanged() 之后未调用 onBindViewHolder

如何将SQLite数据与可重用的RecyclerView适配器一起使用