android - 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();
}
});
}
}
解决方案
我无法发表评论,但您是否检查了适配器内的列表是否有照片 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 上的后台线程获取数据时。您直接将其添加到列表并通知适配器数据集已更改
推荐阅读
- batch-file - 无法将内容流式传输到文件
- php - VueJs Laravel 7 - 更好的方式结构项目
- amazon-web-services - EC2 实例配置文件策略创建
- amazon-web-services - AWS CodePipeline ApplicationStop 生命周期事件失败
- python - 使用 pip 安装特定版本的 vtk
- reactjs - 带有 React Hooks 的受控/非受控输入字段
- php - 带有自定义模块的 Drupal 8/9 覆盖树枝
- ios - 无法从其模块界面构建模块“Razorpay”
- python - 有没有办法舍入非常大的分数,如 3.7625745528893614e-83?
- vb.net - 如何在 VB.NET 中实现 lambda 表达式(错误:表达式不是方法)