【问题标题】:Load image from firebase storage into image view将图像从 Firebase 存储加载到图像视图中
【发布时间】:2019-09-22 20:28:03
【问题描述】:

在我的应用程序中,用户能够向其他用户发送文本和图像,现在我还希望当用户单击发送或接收的图像时,他们将被带到另一个活动,如果图像将被加载到图像视图中用户。

所以我像这样在适配器中的图像中添加了一个点击监听器

 void bind(Messages message) {

            String message_type = message.getType();
            String user_id = message.getFrom();
             String msg_id = message.getKey();

            if (message_type.equals("text")) {
                messageText.setText(message.getMessage());
                // Format the stored timestamp into a readable String using method.
                timeText.setText(DateUtils.formatDateTime(message.getTime()));

               // DatabaseReference messageRef = mRootRef.child("messages").child(mCurrentUserId).child(user_id).child()


                recieved_image.setVisibility(View.INVISIBLE);
                // nameText.setText(message.getSender().getNickname());

                // Insert the profile image from the URL into the ImageView.
                //  Utils.displayRoundImageFromUrl(mContext, message.getSender().getProfileUrl(), profileImage);
            }else {
                messageText.setVisibility(View.INVISIBLE);
                recieved_image.setVisibility(View.VISIBLE);
                Picasso.with(recieved_image.getContext()).load(message.getMessage()).into(recieved_image);
                recieved_image.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(view.getContext(), MessageImageViewerActivity.class);
                        intent.putExtra("message_id",msg_id);
                        view.getContext().startActivity(intent);
                    }
                });

目的是将消息 ID 传输到下一个活动,该活动应该用于像这样从 Firebase 存储中定位和加载图像

 msgImage = findViewById(R.id.MsgImageView);

    mAuth = FirebaseAuth.getInstance();
    final String message_id = getIntent().getStringExtra("message_id");


    mRootRef = FirebaseDatabase.getInstance().getReference();
    mCurrentUserId = mAuth.getCurrentUser().getUid();

    mImageStorage.child("message_images").child(message_id).getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
        @Override
        public void onComplete(@NonNull Task<Uri> task) {
            if (task.isSuccessful()){
                String ima = task.getResult().toString();
               // Picasso.with(MessageImageViewerActivity.this).load(ima).into(msgImage);

                Glide.with(MessageImageViewerActivity.this)
                        .load(ima)
                        .into(msgImage);
            }
        }
    });

但它返回路径无效的错误。这是 logcat 错误消息。

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.storage.StorageReference com.google.firebase.storage.StorageReference.child(java.lang.String)' on a null object reference
    at com.mani.eric.quickchat.ui.MessageImageViewerActivity.onCreate(MessageImageViewerActivity.java:60)
    at android.app.Activity.performCreate(Activity.java:7327)
    at android.app.Activity.performCreate(Activity.java:7318)

请问我正在尝试做什么,这可能吗? 或者我做错了什么。

【问题讨论】:

  • 您的任务,获取“ima”的值正在返回 null...在调用您的图像层之前,您需要一个有效的 url

标签: java android firebase firebase-realtime-database firebase-storage


【解决方案1】:

您需要执行以下操作:

StorageReference mImageStorage = FirebaseStorage.getInstance().getReference();

首先获取对 firebase 存储的引用,然后访问您在 firebase 存储控制台中创建的 child

    mImageStorage.child("message_images").child(message_id).getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
        if (task.isSuccessful()){
            String ima = task.getResult().toString();
           // Picasso.with(MessageImageViewerActivity.this).load(ima).into(msgImage);

            Glide.with(MessageImageViewerActivity.this)
                    .load(ima)
                    .into(msgImage);
        }
    }
});

【讨论】:

  • 谢谢..我真的忘记了。但问题仍未解决,显示新错误Caused by: java.lang.IllegalArgumentException: childName cannot be null or empty
  • 您在 Firebase 存储中有一个名为 message_images 的孩子吗?
  • 另外添加一个日志来检查message_id等于什么
  • 是的,它实际上是我用来保存图像的相同参考。我刚刚复制了它
  • 如何添加日志来检查 message_id 等于什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 2023-03-23
  • 2013-07-29
  • 2018-05-02
  • 2023-03-13
  • 2016-12-28
  • 1970-01-01
相关资源
最近更新 更多