我试图检索一个充满图像的火场存储空间:

这些图像应该能够填充我的回收视图,下面是我的代码,我正在使用幻灯片加载我的图像(我已经正确设置了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();
}
}我的观点持有类:
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));
}
}如何检索图像并在我的适配器中填充它们,任何到教程的链接都会非常感谢,我还没有找到任何。
谢谢
发布于 2019-10-01 04:11:03
您可以使用下面的代码来显示火基图像图像视图(以及适配器)-
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);
}
});发布于 2019-10-01 04:25:13
请遵循以下步骤:
步骤1:在您的模型/POJO类中,您需要为图片url添加一个字段&用于区分图片的ID:
class Pictures {
private String id;
private String image_url;
public String getImage_url() {
return image_url;
}
public void setImage_url(String image_url) {
this.image_url = image_url;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}步骤2:然后,在将图像上传到Firebase时,获取当前图像的下载URL。
Sring mDownloadUrl;
firebaseStorageReference.putFile(resultUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
final Task<Uri> firebaseUri = taskSnapshot.getStorage().getDownloadUrl();
firebaseUri.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
mDownloadUrl = uri.toString();
}
});
}
});步骤3:将每幅图片上传到Firebase上的,创建自定义Pictures对象,并从Firebase获取一个推送键作为其唯一的ID;设置其图片URL,最后使用这个新的Pictures对象更新Firebase数据库
Picutures pic = new Pictures();
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("pictures"); // I chose "pictures", but you may choose a different name
// Getting push key from firebase
String pictureId = databaseReference.push().getKey();
pic.setId(pictureId);
pic.setImage_url(mDownloadUrl);
// update Firebase database with this new Pictures object
databaseReference.child(pictureId).setValue(pic);步骤4:每当您想检索“图片”列表时,都要向Firebase数据库中添加一个侦听器;它可以是ValueEventListener或ChildEventListener (根据您的需要);这里我正在实现ValueEventListener;如果您想要ChildEventListener实现,请随时告诉我;这将从Firebase检索整个图片列表,您可以用它填充RecyclerView适配器。
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("pictures");
List<Pictures> picsList = new ArrayList<>(); // RecyclerView adapter list
PicturesAdapter adapter = new PicturesAdapter(picsList);
recyclerView.setAdapter(adapter);
databaseReference.addValueEventListener(valueEventListener);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.d(TAG, "addValueEventListener: onDataChange()");
// checking if database contains a non-null value
if (dataSnapshot.exists()) {
for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
Pictures picture = singleSnapshot.getValue(Pictures.class);
picsList.add(picture);
}
recyclerView.getAdapter().notifyDataSetChanged();
} else {
Log.d(TAG, "addValueEventListener: No data exists");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, "addValueEventListener: onCancelled()");
}
};步骤5:修改适配器onBindViewHolder()以下载映像
private List<Pictures> pictureList;
@Override
public void onBindViewHolder(@NonNull PictureViewHolder holder, int position)
{
Pictures pi = pictureList.get(position);
GlideApp.with(holder.itemView.getContext())
.load(pi.getImage_url())
.into(holder.picture);
} https://stackoverflow.com/questions/58177663
复制相似问题