Java 将图像从firebase存储加载到图像视图中

Java 将图像从firebase存储加载到图像视图中,java,android,firebase,firebase-realtime-database,firebase-storage,Java,Android,Firebase,Firebase Realtime Database,Firebase Storage,在我的应用程序中,用户可以向其他用户发送文本和图像,现在我还希望当用户单击发送或接收的图像时,如果该图像将加载到用户的图像视图中,他们将被带到其他活动 因此,我在适配器的映像中添加了一个单击侦听器,如下所示 void bind(Messages message) { String message_type = message.getType(); String user_id = message.getFrom();

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

因此,我在适配器的映像中添加了一个单击侦听器,如下所示

 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);
                    }
                });
 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);
            }
        }
    });
目的是将消息id传输到下一个活动,该活动应用于从firebase存储中查找和加载映像,如下所示

 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);
                    }
                });
 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);
            }
        }
    });
请问我想做什么,可能吗?
或者我做的不对。

您需要执行以下操作:

StorageReference mImageStorage = FirebaseStorage.getInstance().getReference();
首先获取对firebase存储的引用,然后访问您在firebase存储控制台中创建的
子项

    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);
        }
    }
});
mImageStorage.child(“message_images”).child(message_id).getDownloadUrl().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
字符串ima=task.getResult().toString();
//毕加索.with(MessageImageViewerActivity.this).load(ima).into(msgImage);
Glide.with(MessageImageViewerActivity.this)
.负载(ima)
.进入(msgImage);
}
}
});

您的任务,获取“ima”的值将返回null。。。在调用图像层之前,你需要一个有效的url。我真的忘了。但问题仍未解决,它显示了由以下原因引起的新错误:java.lang.IllegalArgumentException:childName不能为null或空firebase存储中是否有名为
message\u images
的子项?还添加了一个日志,以检查
message\u id
是否等于是,它实际上与我保存图像时使用的引用相同。我刚刚复制了它。我如何才能添加日志来检查
消息\u id
等于什么