从Firebase的recyclerview中未显示图像 [英] Images not showing in recyclerview from firebase

查看:45
本文介绍了从Firebase的recyclerview中未显示图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将图像从Firebase获取到recyclerview中,但没有显示,我已将下载URL存储在模型类中,以便以后可以检索

I'm trying to get images from firebase into a recyclerview but it doesn't show up I have stored the download URL in a model class so I can retrieve it later

这是在recyclerview中没有图像的屏幕

这是实时数据截图

规则也适用于实时数据库和存储

and also the rules are true for realtimedatabase and storage

Java文件

Search_Fragment.java

 public class Search_Fragment extends Fragment {
    public List<Upload> mUploads;
    PostAdapter postsAdapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_search, container, false);
        RecyclerView postRecyclerView = view.findViewById(R.id.postRecyclerView);
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("uploads");
        postRecyclerView.setLayoutManager(
                new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
        );
        mUploads = new ArrayList<>();
        postsAdapter = new PostAdapter(getContext(), mUploads);
        postRecyclerView.setAdapter(postsAdapter);

        //This are images that i tried manual ly and it worked fine
//        List<PostItem> postItems = new ArrayList<>();
//        postItems.add(new PostItem(R.drawable.image1));
//        postItems.add(new PostItem(R.drawable.image2));
//        postItems.add(new PostItem(R.drawable.image3));
//        postItems.add(new PostItem(R.drawable.image4));
//        postItems.add(new PostItem(R.drawable.image5));
//        postItems.add(new PostItem(R.drawable.image7));
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                if (snapshot.exists()){
                    for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                        Upload upload = dataSnapshot.getValue(Upload.class);
                        Log.i("Sucess",upload.getmImageUrl());
                        mUploads.add(upload);

                }

                }
                else {
                    Toast.makeText(getContext(),"Failure",Toast.LENGTH_SHORT).show();
                }
                //notify the adapter
                postsAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
            }
        });
        return view;
    }
}

PostAdapter.Java//Apadter类

public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder> {
    public static List<Upload> mUploads;
    Context mcontext;


    public PostAdapter(Context context, List<Upload> uploads) {
        mUploads = uploads;
        mcontext = context;
    }


    @NonNull
    @Override
    public PostViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        view = LayoutInflater.from(mcontext).inflate(R.layout.post_item_container, parent, false);
        return new PostViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull PostViewHolder holder, int position) {
        Upload uploadCurrent = mUploads.get(position);
        Transformation transformation = new RoundedTransformationBuilder()
                .borderColor(Color.WHITE)
                .borderWidthDp(5)
                .cornerRadiusDp(13)
                .oval(false)
                .build();
        Log.i("sucess",uploadCurrent.getmImageUrl());
        Picasso.get()
                .load(uploadCurrent.getmImageUrl())
                .fit()
                .transform(transformation)
                .into(holder.postImageView);


    }

    @Override
    public int getItemCount() {
        return mUploads.size();
    }

    public static class PostViewHolder extends RecyclerView.ViewHolder {
        RoundedImageView postImageView;

        PostViewHolder(@NonNull View itemView) {
            super(itemView);
            postImageView = itemView.findViewById(R.id.imagePost);
        }

    }
}

Upload_Fragment.Java

public class Upload_Fragment extends Fragment {
    private static final int PICK_IMAGE_REQUEST = 10;
    private ImageView uploadImageView;
    private Uri mImageUri;
    private StorageReference storageReference;
    private DatabaseReference databaseReference;
    private StorageTask mUploadTask;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_upload, container, false);
        Button chooseImageButton = view.findViewById(R.id.upload_image_button);
        Button uploadImageButton = view.findViewById(R.id.done_button);
        uploadImageView = view.findViewById(R.id.upload_image_view);
        storageReference = FirebaseStorage.getInstance().getReference("uploads");
        databaseReference = FirebaseDatabase.getInstance().getReference("uploads");
        chooseImageButton.setOnClickListener(v -> openFileChooser());
        uploadImageButton.setOnClickListener(v -> {
            if (mUploadTask != null && mUploadTask.isInProgress()) {
                Toast.makeText(getActivity(), "Upload in Progress", Toast.LENGTH_SHORT).show();

            } else {
                uploadToFirebase(mImageUri);
            }


        });

        return view;
    }

    private void openFileChooser() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent, PICK_IMAGE_REQUEST);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && data != null && data.getData() != null) {
            mImageUri = data.getData();
            Picasso.get().load(mImageUri).into(uploadImageView);

        }
    }

    private String getFileExtension(Uri uri) {

        ContentResolver contentResolver = Objects.requireNonNull(getActivity()).getContentResolver();
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        return mime.getExtensionFromMimeType(contentResolver.getType(uri));
    }

    private void uploadToFirebase(Uri mImageUri) {
        if (mImageUri != null) {
            final ProgressDialog progressDialog = new ProgressDialog(getActivity());
            progressDialog.setTitle("Uploading...");
            progressDialog.show();

            StorageReference reference = storageReference.child(System.currentTimeMillis()
                    + "." + getFileExtension(mImageUri));
            reference.putFile(mImageUri)
                    .addOnSuccessListener(taskSnapshot -> {
                        progressDialog.dismiss();
                        Toast.makeText(getActivity(), "Saved Succesfully", Toast.LENGTH_SHORT).show();
                        reference.getDownloadUrl()
                                .addOnSuccessListener(uri -> {
                                    Upload upload = new Upload(uri.toString());
                                    String uploadId = databaseReference.push().getKey();
                                    databaseReference.child(uploadId).setValue(upload);
                                    Log.i("Link", uri.toString());
                                });
                    })
                    .addOnProgressListener(snapshot -> {
                        double progress = (100.0 * snapshot.getBytesTransferred() / snapshot
                                .getTotalByteCount());
                        progressDialog.setMessage("Uploaded " + (int) progress + "%");
                    })
                    .addOnFailureListener(e -> {
                        progressDialog.dismiss();
                        Toast.makeText(getActivity(), "Error Ocurred" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    });


        }
    }
}

Upload.Java//模型类

public class Upload {
    private String mImageUrl;


    public Upload() {

    }

    public Upload(String imageUrl) {
        this.mImageUrl = imageUrl;
    }

    public String getmImageUrl() {
        return mImageUrl;
    }

    public void setmImageUrl(String mImageUrl) {
        this.mImageUrl = mImageUrl;
    }
}

推荐答案

请参阅以解决您的问题,然后需要调试几件事,然后只有您才能解决该问题.此外,您还需要弄清楚什么时候发生.您可以尝试以下方法以获得解决方案.

See to resolve your issue it needs to be debug few things then and then only you will able to resolve the issue.Also you need to clarify at which point what happen.You can try below things to get solution.

1 ..将 Log Toast 放入 for循环内,同时将url添加到 mUploads 列表中.敬酒 upload.getmImageUrl()并检查它是否为您提供了正确的http图片网址.

1..Put Log or Toast inside for loop while adding url to the mUploads list.Like toasting upload.getmImageUrl() and check is it giving you right http image url or not.

2.在Picasso加载图像网址之前,先放置 Log Toast .就像举起 uploadCurrent.getmImageUrl()并检查是否给出您是否可以使用http图片网址.

2.Put Log or Toast before the loading image url by Picasso.Like toasting uploadCurrent.getmImageUrl() and check is it giving you right http image url or not.

如果在烘烤时发生错误,则将 toString(); 放在最后.之后,您将有更好的主意来解决此问题.

If error occuerd while toasting this put toString(); at the end. After that you will get better idea to resolve the issue.

最重要的是,如果您输入正确的URL,则问题出在 Picasso 库中.您可以尝试 Glide 加载图像.为此添加

In above all case if you are getting right url then the problem is with Picasso library.You can try Glide to load the image.For that add

实现'com.github.bumptech.glide:glide:4.12.0'

annotationProcessor'com.github.bumptech.glide:compiler:4.12.0'

,然后在侧面 onBindViewHolder 加载这样的图像.

and then in side onBindViewHolder load image like this.

Glide.with(mContext).load(uploadCurrent.getmImageUrl()).into(holder.postImageView);

这篇关于从Firebase的recyclerview中未显示图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆