如何从AllResponse的私有内部类中获取数据并在Adapter中使用?
问题场景
- 适配器代码:
holder.tv_item_title.setText(dataList.get(position).getTitle());
- AllResponse数据类:
public class AllResponse { public AllResponse(List<WishResponseList> wishResponseListList) { this.wishResponseListList = wishResponseListList; } List<WishResponseList> wishResponseListList; private class WishResponseList { int id; String title; String contents; String writer; boolean clear; String color; public int getId() { return id; } } }
- 回调方法:
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response)
你的核心需求是在Adapter中获取AllResponse私有内部类里的数据,同时解决Kotlin实现时的编译错误,以下是具体解决方案:
1. 修复Java版AllResponse的访问权限问题
私有内部类WishResponseList无法被外部类直接访问,需要调整权限并补充Getter方法:
public class AllResponse { private List<WishResponseList> wishResponseListList; public AllResponse(List<WishResponseList> wishResponseListList) { this.wishResponseListList = wishResponseListList; } // 将内部类改为public,允许外部访问 public class WishResponseList { private int id; private String title; private String contents; private String writer; private boolean clear; private String color; public int getId() { return id; } public String getTitle() { return title; } public String getContents() { return contents; } public String getWriter() { return writer; } public boolean isClear() { return clear; } public String getColor() { return color; } } // 对外提供获取数据列表的方法 public List<WishResponseList> getWishResponseListList() { return wishResponseListList; } }
2. MainActivity中传递数据到Adapter
在回调里解析数据并构建AllResponse,再把内部类列表传给Adapter:
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { if (response.isSuccessful() && response.body() != null) { // 假设已完成JSON解析,得到WishResponseList类型的列表 List<AllResponse.WishResponseList> wishDataList = ...; AllResponse allResponse = new AllResponse(wishDataList); // 把数据列表传入Adapter YourRecyclerAdapter adapter = new YourRecyclerAdapter(allResponse.getWishResponseListList()); yourRecyclerView.setAdapter(adapter); } }
3. Adapter中正常调用Getter
此时你的原适配器代码即可正常工作:
holder.tv_item_title.setText(dataList.get(position).getTitle());
4. Kotlin实现的编译错误修复
Kotlin中内部类的声明规则与Java不同,之前的编译错误大概率是权限或内部类类型问题,改写后的Kotlin版AllResponse如下:
class AllResponse(private val wishResponseListList: List<WishResponseList>) { // 不需要持有外部类引用时,去掉inner(对应Java静态内部类) // 需要外部类引用时保留inner(对应Java非静态内部类) data class WishResponseList( val id: Int, val title: String, val contents: String, val writer: String, val clear: Boolean, val color: String ) fun getWishResponseListList(): List<WishResponseList> = wishResponseListList }
Adapter中可直接访问属性:
holder.tv_item_title.text = dataList[position].title
内容的提问来源于stack exchange,提问作者JunJaBoy
相关产品推荐
相关产品推荐

