首页 > 解决方案 > firebase 回收器适配器不加载图像但显示数据

问题描述

我是android studio的初学者我正在尝试将firebase数据库中的数据加载到recyclerview中,但是我在下面的代码中遇到了一个问题,即RecyclerView不加载图像但显示数据......并且android studio没有显示任何错误,我也搜索在谷歌但我没有找到任何解决方案..现在下面是我的代码......谢谢andvance

适配器类

  private Context mContext;
  private List<Upload> mUpload;

public ImageAdapter(Context context, List<Upload> uploads) {
    mContext = context;
  mUpload = uploads;
}


//this method will create views
@NonNull
@Override
public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v= LayoutInflater.from(mContext).inflate(R.layout.image_item ,parent,false);
    return  new ImageViewHolder(v);
}


//this method is used for databinding that binds our data with views
@Override
public void onBindViewHolder(@NonNull ImageViewHolder holder, int position) {
    Upload uploadCurrent=mUpload.get(position);
    holder.textViewName.setText(uploadCurrent.getmName());
    Picasso.with(mContext)
            .load(uploadCurrent.getmImageUrl())
            .fit()
            .centerCrop()
            .into(holder.imageView);


}

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




public  class  ImageViewHolder extends  RecyclerView.ViewHolder{
    public TextView textViewName;
    public ImageView imageView;


    public ImageViewHolder(View itemView) {
        super(itemView);
        textViewName=itemView.findViewById(R.id.text_view_name);
        imageView=itemView.findViewById(R.id.image_view_upload);

    }
}

上传课程

  public class Upload {

private String mName;
private  String mImageUrl;

public  Upload () {}

public Upload(String name, String imageUrl) {

    if(name.trim().equals(""))
    {
        name="No name";
    }

    this.mName = name;
    this.mImageUrl = imageUrl;
}

public String getmName() {
    return mName;
}

public void setmName(String mName) {
    this.mName = mName;
}

public String getmImageUrl() {
    return mImageUrl;
}

public void setmImageUrl(String mImageUrl) {
    this.mImageUrl = mImageUrl;
}
 }

这是 MainAvtivity/ImageActivity

 public class ImagesActivity extends AppCompatActivity {

private RecyclerView mRecyclerView;
private  ImageAdapter mAdapter;

private DatabaseReference mDatabaseRef;
private List<Upload> mUploads;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_images);

    mRecyclerView=findViewById(R.id.recyler_view);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

    mUploads=new ArrayList<>();



    mDatabaseRef= FirebaseDatabase.getInstance().getReference("uploads");

    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
               for(DataSnapshot postSnapshot: dataSnapshot.getChildren())
               {
                   Upload upload=postSnapshot.getValue(Upload.class);
                   mUploads.add(upload);
               }

               mAdapter=new ImageAdapter(ImagesActivity.this,mUploads);
               mRecyclerView.setAdapter(mAdapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(ImagesActivity.this,databaseError.getMessage(),Toast.LENGTH_SHORT).show();
        }
    });
}

}

标签: androidfirebaseandroid-recyclerview

解决方案


我无法发表评论,但您是否检查了适配器内的列表是否有照片 URL?

改变

 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
           for(DataSnapshot postSnapshot: dataSnapshot.getChildren())
           {
               Upload upload=postSnapshot.getValue(Upload.class);
               mUploads.add(upload);
           }

           mAdapter=new ImageAdapter(ImagesActivity.this,mUploads);
           mRecyclerView.setAdapter(mAdapter);
    }

进入

 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
           for(DataSnapshot postSnapshot: dataSnapshot.getChildren())
           {
               Upload upload=postSnapshot.getValue(Upload.class);
               mAdapter.list.add(upload);
               mAdapter.notifyDataSetChanged();
           }


    }

适配器类

  private Context mContext;
  ArrayList<Upload> list= new ArrayList<>();

    public mAdapter(Context context ) {
     mContext = context;
    }

主要活动

      mAdapter=new ImageAdapter(ImagesActivity.this);
           mRecyclerView.setAdapter(mAdapter);

这背后的逻辑是 Adapterclass 有一个 Arraylist。当您从 onDataChange 上的后台线程获取数据时。您直接将其添加到列表并通知适配器数据集已更改


推荐阅读