我正在尝试检索充满图像的 Firebase 存储:
这些图像应该能够填充我的回收 View ,这是我的代码,我正在使用 Glide 加载我的图像(我正确设置了 MyGlideAppModule):
public class PicturesAdapter extends RecyclerView.Adapter<PictureViewHolder>
{
private List<Pictures> pictureList;
private StorageReference mStorageRef;
public PicturesAdapter(List<Pictures> pictureList)
{
this.pictureList = pictureList;
}
@NonNull
@Override
public PictureViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.picture_cv,
parent, false);
return new PictureViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull PictureViewHolder holder, int position)
{
Pictures pi = pictureList.get(position);
FirebaseStorage storage = FirebaseStorage.getInstance();
mStorageRef = storage.getReference();
GlideApp.with(holder.itemView.getContext())
.load(mStorageRef)
.into(holder.picture);
}
@Override
public int getItemCount() {
return pictureList.size();
}
}
我的 View 持有者类:
public class PictureViewHolder extends RecyclerView.ViewHolder
{
public ImageView picture;
public PictureViewHolder(@NonNull View itemView)
{
super(itemView);
picture = (ImageView) itemView.findViewById(R.id.bobbyBrown);
}
public ImageView getPictureContents()
{
return picture;
}
}
在将图像添加到 firebase 之前,我将每个图像存储在本地,然后按如下方式调用适配器:
public class PicturesFragment extends Fragment {
private List<Pictures> pics = null;
private RecyclerView mRecyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_pictures, container, false);
initializeView();
mRecyclerView = (RecyclerView) v.findViewById(R.id.picList);
mRecyclerView.setHasFixedSize(true);
PicturesAdapter p2 = new PicturesAdapter(pics);
LinearLayoutManager llm = new LinearLayoutManager(v.getContext());
llm.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(llm);
mRecyclerView.setAdapter(p2);
// Inflate the layout for this fragment
return v;
}
private void initializeView()
{
pics = new ArrayList<Pictures>();
pics.add(new Pictures(R.drawable.firepit1_a));
pics.add(new Pictures(R.drawable.firepit2_a));
pics.add(new Pictures(R.drawable.firepit3_a));
pics.add(new Pictures(R.drawable.firepit4_a));
pics.add(new Pictures(R.drawable.firepit5_a));
pics.add(new Pictures(R.drawable.firepit6_a));
pics.add(new Pictures(R.drawable.pic1));
pics.add(new Pictures(R.drawable.pic2));
pics.add(new Pictures(R.drawable.pic3));
pics.add(new Pictures(R.drawable.pic4));
pics.add(new Pictures(R.drawable.pic5));
pics.add(new Pictures(R.drawable.pic6));
pics.add(new Pictures(R.drawable.pic7));
pics.add(new Pictures(R.drawable.pic8));
}
}
我如何检索图像并将其填充到我的适配器中,任何指向教程的链接将不胜感激,我还没有找到任何链接。
谢谢
最佳答案
您可以使用以下代码来显示 firebase 图像 imageview(以及在适配器中)-
String imgPath = IMAGE_NAME or IMAGE_PATH;
FirebaseStorage mStorage = FirebaseStorage.getInstance();
StorageReference storageRef = mStorage.child(imgPath);
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Glide.with(context)
.load(uri)
.fitCenter()
.diskCacheStrategy(DiskCacheStrategy.ALL) //ALL or NONE as your requirement
.thumbnail(Glide.with(context).load(R.drawable.ic_image_loading))
.error(R.drawable.ic_image_error)
.into(myViewHolder.spImg);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
Glide.with(context)
.load(R.drawable.ic_image_error)
.fitCenter()
.into(myViewHolder.spImg);
}
});
关于java - Firebase 存储图像检索 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58177663/