[英]How can I display images using recyclerview
我正在關注有關如何從 Firebase 存儲檢索上傳的圖像以在 recyclerview 中顯示的教程。 但是當我運行我的應用程序時,我沒有看到上傳的圖像,而是我的應用程序崩潰了,並且錯誤一直指向包含此代碼的特定行ImageUploadInfo imageUploadInfo = postSnapshot.getValue(ImageUploadInfo.class);
但它並沒有真正解釋為什么它是一個錯誤。 我不確定這是怎么回事,有人可以嗎...請幫助我我整個星期都在尋找有關此問題的答案,但沒有得到任何答案。 感謝提前
錯誤:
FATAL EXCEPTION: main
Process: com.myapp.Gogo, PID: 22974
com.google.firebase.database.DatabaseException: Found two getters or fields
with conflicting case sensitivity for property: imageurl
2020-03-05 11:06:36.238 22974-22974/com.myapp.Gogo
E/RecyclerView: No adapter attached; skipping layout
適配器類:
public class AdapterOne extends RecyclerView.Adapter<AdapterOne.ViewHolder> {
Context context;
List <ImageUploadInfo> ImageUploadInfoList;
public AdapterOne(Context c, List<ImageUploadInfo> TempList){
this.ImageUploadInfoList=TempList;
this.context=c;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview,parent,false);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
ImageUploadInfo imageUploadInfo=ImageUploadInfoList.get(position);
//loading image with glide libary
Glide.with(context).load(imageUploadInfo.getImageUrl()).into(holder.imageView);
}
@Override
public int getItemCount() {
return ImageUploadInfoList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public ImageView imageView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView=(ImageView) itemView.findViewById(R.id.imageview);
}
}
}
ImageUpload.class:
public class ImageUploadInfo {
public String imageURL;
public ImageUploadInfo( String url) {
//this.imageName = name;
this.imageURL= url;
}
public String getImageUrl() {
return null;
}
}
這是主頁面:
if(firebaseUser!=null) {
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference("Users");
DatabaseReference uidRef = rootRef.child("images").child(uid);
uidRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
ImageUploadInfo imageUploadInfo = postSnapshot.getValue(ImageUploadInfo.class);
list.add(imageUploadInfo);
}
adapter1 = new AdapterOne(getApplicationContext(), list);
recyclerView.setAdapter(adapter1);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
像這樣更改您的模型類,看看這是否適合您。 將其標記為私有會使 firebase 只找到 getter/setter 並在命名時嘗試遵守camelCase 的Java 約定。
public class ImageUploadInfo {
private String imageUrl; // main change is this should be private
private ImageUploadInfo() {} // default constructor that takes no arguments
public ImageUploadInfo(String imageUrl) {
this.imageUrl= imageUrl;
}
public String getImageUrl() {
return imageUrl; // and why are you returning null here
}
}
對於適配器問題。 您需要從 MainThread 設置它,因此,從您的onDataChange
方法移動行
adapter1 = new AdapterOne(getApplicationContext(), list);
recyclerView.setAdapter(adapter1);
adapter1.notifyDataSetChanged;
到您的活動的onCreate()
方法,並在添加到使用list = new ArrayList<>();
初始化的list = new ArrayList<>();
后在onDataChange
list = new ArrayList<>();
只使用
adapter1.notifyDataSetChanged
讓我知道這是否能夠解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.