首页 > 解决方案 > 如何在 Firebase 中获取多个图像的 URL

问题描述

我在 Firebase 存储中一次存储多个图像,我需要在 Firebase 数据库中获取每个图像的 URL。

这是代码:

private void SaveVersus() {

    comment = Comment.getText().toString();

    if (imageUri==null||imageUri2==null){
        Toast.makeText(this, "...Select a Image...", Toast.LENGTH_SHORT).show();
    }
    else if(imageUri!=null&&imageUri2!=null&&imageUri3==null&&imageUri4==null) {
        //Save2ImagesFirebase();
        List<Uri> uri = Arrays.asList(imageUri,imageUri2);
        storeMultipleImages(uri);
    }
    else if(imageUri!=null&&imageUri2!=null&&imageUri3!=null&&imageUri4==null){
        //Save3ImagesFirebase();
        List<Uri> uri2 = Arrays.asList(imageUri,imageUri2,imageUri3);
        storeMultipleImages(uri2);
    }
    else if(imageUri!=null&&imageUri2!=null&&imageUri3!=null&&imageUri4!=null){
        //Save4ImagesFirebase();
        List<Uri> uri3 = Arrays.asList(imageUri,imageUri2,imageUri3,imageUri4);
        storeMultipleImages(uri3);
    }
}


public void storeImage(Uri imageUri) {
    StorageReference filepath = mStorage.child("Versus Images").child(imageUri.getLastPathSegment());
    filepath.putFile(imageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

            if (task.isSuccessful()){

                downloadURL = task.getResult().getUploadSessionUri().toString();

                Toast.makeText(ImageVersus.this, "Versus Published", Toast.LENGTH_SHORT).show();

                GetInDB();

            }
            else{
                Toast.makeText(ImageVersus.this, "..Error..", Toast.LENGTH_SHORT).show();
            }

        }
    });

}

private void GetInDB() {

    mDatabase.child(current_userID).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            if(dataSnapshot.exists()){

                String username = dataSnapshot.child("Username").getValue().toString();
                HashMap InfoMap = new HashMap<>();
                InfoMap.put("username",username);
                InfoMap.put("imageUrl",downloadURL);
                versusDBRef.child(current_userID).updateChildren(InfoMap);
            }

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

}

public void storeMultipleImages(List<Uri> imageUris) {
    for (Uri uri : imageUris) {
        storeImage(uri);
    }


}

问题是,在 hashmap 中,我只能放置一个图像的 URL,我需要根据用户选择的图片数量获取多个 URL,如果他们选择了两个,那么在 hashmap 中必须是两个 URL 和很快。

标签: javaandroidfirebasefirebase-realtime-databasefirebase-storage

解决方案


推荐阅读