如何使用Android获取firebase存储中上次上传图像的路径?

时间:2017-01-07 12:36:56

标签: android firebase firebase-storage

我已经学会了如何从图库中选择图像,如何将其上传到火力库存储中,并将其显示在onActivityResult中,一切正常。我的问题是,当我重新启动活动时,图像消失了。这是我的代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PICK_PHOTO && resultCode == RESULT_OK) {
        Uri uri = data.getData();

        StorageReference photoStorageReference = storageReference.child("Photos").child(uri.getLastPathSegment());
        String path = storageReference.getPath(); //get the path of the last uploaded image
        photoStorageReference.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Uri downloadUri = taskSnapshot.getDownloadUrl();
                Picasso.with(StorageActivity.this).load(downloadUri).fit().centerCrop().into(imageView);
            }
        });
    }
}

我创建了一个名为displayLastImage()的方法。当我从onCreate这样调用此方法时:

private void displayLastImage() {
    StorageReference newStorageReference = storageReference.child("Photos/car.jpg");
    Glide.with(this).using(new FirebaseImageLoader()).load(newStorageReference).into(imageView);
}

工作得很完美,但是当我使用onCreate代替path"Photos/46"调用方法时,这样:

private void displayLastImage() {
    StorageReference newStorageReference = storageReference.child(path);
    Glide.with(this).using(new FirebaseImageLoader()).load(newStorageReference).into(imageView);
}

我收到此错误:java.lang.IllegalArgumentException: childName cannot be null or empty。如何获取上次上传图像的path以便我能正确显示?

提前致谢!

1 个答案:

答案 0 :(得分:0)

上传图片时,请将其存储在基于用户从图库中选择的图片的路径中。

String path = storageReference.getPath();

当您重新启动活动时,路径将不会被初始化,因此您尝试在未知路径中查找图像。

这意味着您需要“记住”活动调用之间的路径。您可以将其存储在应用的共享首选项中。这些都存在于活动之间。

更常见的是将图像路径(或其下载URL)存储在云存储中,例如Firebase数据库。您可以在Firebase Codelab for Android中找到相关示例。