Как получить URL нескольких изображений в Firebase - PullRequest
0 голосов
/ 04 июня 2018

Я храню несколько изображений одновременно в Firebase Storage, и мне нужно получить URL каждого из них в базе данных Firebase.

Вот код:

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);
    }


}

Проблема в том, что в хэш-карте я могу указать только URL-адрес одного изображения, и мне нужно получить несколько URL-адресов в зависимости от того, какое количество картинок выберет пользователь, если они выбрали два, то в хэш-карте должно быть два URL-адреса ии так далее.

...