首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火灾存储图像检索RecyclerView

火灾存储图像检索RecyclerView
EN

Stack Overflow用户
提问于 2019-10-01 03:21:52
回答 2查看 3.7K关注 0票数 0

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

这些图像应该能够填充我的回收视图,下面是我的代码,我正在使用幻灯片加载我的图像(我已经正确设置了MyGlideAppModule ):

代码语言:javascript
复制
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();
    }
}

我的观点持有类:

代码语言:javascript
复制
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之前,我将每个映像本地存储,然后按如下方式调用适配器:

代码语言:javascript
复制
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));
    }
}

如何检索图像并在我的适配器中填充它们,任何到教程的链接都会非常感谢,我还没有找到任何。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-01 04:11:03

您可以使用下面的代码来显示火基图像图像视图(以及适配器)-

代码语言:javascript
复制
 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);
                    }
                });
票数 1
EN

Stack Overflow用户

发布于 2019-10-01 04:25:13

请遵循以下步骤:

步骤1:在您的模型/POJO类中,您需要为图片url添加一个字段&用于区分图片的ID:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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数据库

代码语言:javascript
复制
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数据库中添加一个侦听器;它可以是ValueEventListenerChildEventListener (根据您的需要);这里我正在实现ValueEventListener;如果您想要ChildEventListener实现,请随时告诉我;这将从Firebase检索整个图片列表,您可以用它填充RecyclerView适配器。

代码语言:javascript
复制
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()以下载映像

代码语言:javascript
复制
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);
}   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58177663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档