【问题标题】:Image uploaded to firebase storage but not visible in app UI图片已上传到 Firebase 存储,但在应用 UI 中不可见
【发布时间】:2020-11-06 09:34:36
【问题描述】:

当从 ImagePicker 中选择特定图像时,它会成功上传到 Firebase 存储,但在 UI 中不可见。

MessageAdapter.java:

public class MessageAdapter extends ArrayAdapter<FriendlyMessage> {
public MessageAdapter(Context context, int resource, List<FriendlyMessage> objects) {
    super(context, resource, objects);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = ((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message, parent, false);
    }

    ImageView photoImageView = (ImageView) convertView.findViewById(R.id.photoImageView);
    TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView);
    TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView);

    FriendlyMessage message = getItem(position);

    assert message != null;
    boolean isPhoto = message.getPhotoUrl() != null;
    if (isPhoto) {
        messageTextView.setVisibility(View.GONE);
        photoImageView.setVisibility(View.VISIBLE);
        Glide.with(photoImageView.getContext())
                .load(message.getPhotoUrl())
                .into(photoImageView);
    } else {
        messageTextView.setVisibility(View.VISIBLE);
        photoImageView.setVisibility(View.GONE);
        messageTextView.setText(message.getText());
    }
    authorTextView.setText(message.getName());

    return convertView;
}

}

有人知道如何解决这个问题吗?

【问题讨论】:

  • 我觉得首先要确认图片上传成功。检查 Firebase 存储以确认这一点。然后确认图片上传成功后生成的URL是否保存在message对象上。如果上述情况属实,则尝试将其打印到控制台,然后确认 getPhotoUrl() 不为空。如果它不为空,请确保您的上传过程生成了一个令牌并将其附加到照片 url (&token=a986e967-8e65-487d-a7ef-8476dbf7a11d) 以便可以公开访问。分享您上传照片代码也会很有帮助。
  • load(message.getPhotoUrl())。我们怎么知道你有什么样的 url?
  • 进一步你没有告诉 if 块或 else 块是否被执行。我们怎么知道?
  • message.getPhotoUrl() 返回什么?
  • message.getPhotoUrl() 返回 'com.google.android.gms.tasks.zzu@945da74' 图像也会上传到 firebase 存储。

标签: android firebase google-cloud-platform firebase-storage


【解决方案1】:

我通过用这个替换我以前的代码来解决这个问题:

//upload file to firebase storage
        photoRef.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                photoRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        FriendlyMessage friendlyMessage = new FriendlyMessage(null,mUsername,uri.toString());
                        mMsgDatabaseReference.push().setValue(friendlyMessage);
                    }
                });
            }
        });

此代码返回 Uri:“https://firebasestorage.googleapis.com/v0/b/app_name.appspot.com/o/chat_photo%2Fimage%3A61310?alt=media&token=f2a9d6f6-aa4c-4fa9-a66a-6727dd2d0e8d " 传递给 FriendlyMessage 对象以在 UI 中显示图像。

我以前的代码:

photoRef.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Task<Uri> u = taskSnapshot.getMetadata().getReference().getDownloadUrl();
FriendlyMessage friendlyMessage = new FriendlyMessage(null,mUsername,u.toString());
                        mMsgDatabaseReference.push().setValue(friendlyMessage);

u.toString() 返回此 URL:“com.google.android.gms.tasks.zzu@945da74”,因为 getDownloadUrl() 是使用 TaskSnapshot 的引用调用的。这就是照片在 UI 中不可见的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 2016-05-28
    • 1970-01-01
    • 2021-12-17
    • 2020-12-25
    • 2021-12-23
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多