Java 将数据传递到RecyclerView适配器

Java 将数据传递到RecyclerView适配器,java,android,android-recyclerview,Java,Android,Android Recyclerview,我打了一个改造电话,响应的大小就是我想要传递给我的RecyclerView适配器的主要数据集。我可以确认我正在成功地打电话进行改装 我很好奇如何将数据集的大小传递给MyAdapter类。下面是我的代码: 在我的主要活动中: call.enqueue(new Callback<List<Recipe>>() { @Override public void onResponse(Call<List<Recipe>> ca

我打了一个改造电话,响应的大小就是我想要传递给我的RecyclerView适配器的主要数据集。我可以确认我正在成功地打电话进行改装

我很好奇如何将数据集的大小传递给MyAdapter类。下面是我的代码:

在我的主要活动中:

call.enqueue(new Callback<List<Recipe>>() {
        @Override
        public void onResponse(Call<List<Recipe>> call, Response<List<Recipe>> response) {
            Log.v("TAG", String.valueOf(response.isSuccessful()));
            mRecipeListResponse = response.body();
            for (Recipe recipe : mRecipeListResponse){
                Log.v("ID", recipe.getId().toString());
            }

            mAdapter.setDataSet(mRecipeListResponse);
            mRecipeList.setAdapter(mAdapter);
  ;            }

        @Override
        public void onFailure(Call<List<Recipe>> call, Throwable t) {
            Log.v("TAG", t.getMessage());
        }
    });
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.v(“TAG”,String.valueOf(response.issusccessful());
mRecipeListResponse=response.body();
用于(配方:mRecipeListResponse){
Log.v(“ID”,recipe.getId().toString());
}
setDataSet(mRecipeListResponse);
mRecipeList.setAdapter(mAdapter);
;            }
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.v(“TAG”,t.getMessage());
}
});
MyAdapter:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

private List<Recipe> mRecipeDataSet;

public class ViewHolder extends RecyclerView.ViewHolder{


    protected CardView mCardView;
    protected TextView mTextView;

    public ViewHolder(View itemView) {
        super(itemView);

        mCardView = itemView.findViewById(R.id.recipe_cardview);
        mTextView = itemView.findViewById(R.id.id_of_recipe_item);
    }
}
@NonNull
@Override
public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recipe_item, parent,false);
    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull MyAdapter.ViewHolder holder, int position) {
        String id = mRecipeDataSet.get(position).getId();
        holder.mTextView.setText(id);

}

@Override
public int getItemCount() {
    return mRecipeDataSet.size();
}

public List<Recipe> setDataSet(List<Recipe> recipeList){
    return mRecipeDataSet;
}

public List<Recipe> getmRecipeDataSet() {
    return mRecipeDataSet;
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{ 私有列表mRecipeDataSet; 公共类ViewHolder扩展了RecyclerView.ViewHolder{ 受保护的CardView-mCardView; 受保护的文本视图mTextView; 公共视图持有者(视图项视图){ 超级(项目视图); mCardView=itemView.findviewbyd(R.id.recipe\u cardwiew); mTextView=itemView.findviewbyd(配方项的R.id.id); } } @非空 @凌驾 public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){ 视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.recipe_项,parent,false); 返回新的视图持有者(v); } @凌驾 public void onBindViewHolder(@NonNull MyAdapter.ViewHolder,int位置){ String id=mRecipeDataSet.get(position.getId(); holder.mTextView.setText(id); } @凌驾 public int getItemCount(){ 返回mRecipeDataSet.size(); } 公共列表setDataSet(列表recipeList){ 返回mRecipeDataSet; } 公共列表getmRecipeDataSet(){ 返回mRecipeDataSet; } }
我猜您是用null
mRecipeDataSet
启动了
MyAdapter
。请尝试以下代码

private List<Recipe> mRecipeDataSet = new ArrayList<Recipe>();
private List mRecipeDataSet=new ArrayList();
并替换您的代码

//this is wrong, it doesn't do the right thing as the function name suggests.
public List<Recipe> setDataSet(List<Recipe> recipeList){
    return mRecipeDataSet;
}
//这是错误的,它没有按照函数名所示做正确的事情。
公共列表setDataSet(列表recipeList){
返回mRecipeDataSet;
}

public void setDataSet(列表recipeList){
mRecipeDataSet=recipeList;
}

我猜您是用null
mRecipeDataSet
启动了
MyAdapter
。请尝试以下代码

private List<Recipe> mRecipeDataSet = new ArrayList<Recipe>();
private List mRecipeDataSet=new ArrayList();
并替换您的代码

//this is wrong, it doesn't do the right thing as the function name suggests.
public List<Recipe> setDataSet(List<Recipe> recipeList){
    return mRecipeDataSet;
}
//这是错误的,它没有按照函数名所示做正确的事情。
公共列表setDataSet(列表recipeList){
返回mRecipeDataSet;
}

public void setDataSet(列表recipeList){
mRecipeDataSet=recipeList;
}


我想我还没有理解。您已经使用“setDataSet()”将整个数据传递给该适配器,因此该适配器已经可以从该方法获取数据大小…我最初在何处接收空指针?请说得更准确些。关于代码,唯一要说的是关于“onResponse()”方法:如果从后台线程调用此方法,那么调用“Adapter.setAdapter()”可能是错误的因为该命令应该在适配器中的UiThread.create构造函数中执行,并在构造函数中传递mRecipeListResponse和在适配器中赋值mRecipeDataSet=mRecipeListResponse。并更改mAdapter.setDataSet(mRecipeListResponse);to mAdapter=新的MyAdapter(mRecipeListResponse);我想我没有理解。您已经使用“setDataSet()”将整个数据传递给该适配器,因此该适配器已经可以从该方法获取数据大小…我最初在何处接收空指针?请说得更准确些。关于代码,唯一要说的是关于“onResponse()”方法:如果从后台线程调用此方法,那么调用“Adapter.setAdapter()”可能是错误的因为该命令应该在适配器中的UiThread.create构造函数中执行,并在构造函数中传递mRecipeListResponse和在适配器中赋值mRecipeDataSet=mRecipeListResponse。并更改mAdapter.setDataSet(mRecipeListResponse);to mAdapter=新的MyAdapter(mRecipeListResponse);我是否在MainActivity或Adapter类中更改了此选项?您的适配器类谢谢尝试,仍然没有填充任何数据,此处提供完整代码:没有填充数据,也没有错误?正确,我倾向于相信它是我的viewholder,但取消在MainActivity或Adapter类中更改此选项?您的适配器类谢谢尝试,仍然没有填充任何数据,这里有完整的代码:没有填充数据,也没有错误?正确,我倾向于相信它是我的viewholder,但不确定