Как заполнить Gridview изображениями, полученными из хранилища Firebase - PullRequest
0 голосов
/ 23 марта 2020

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

На данный момент это мой код:

final Query chatRoomMsgs = db.collection("chatrooms").document(chatRoomID).collection("Messages").whereEqualTo("sentby", firebaseAuth.getUid());
    chatRoomMsgs.get()
            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                @Override
                public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                    ArrayList<String> sentPicsURLS = new ArrayList<String>();

                    for(QueryDocumentSnapshot documentSnapshot: queryDocumentSnapshots){

                        for(int i = 0; i < queryDocumentSnapshots.size(); i++) {
                            sentPicsURLS.add(documentSnapshot.get("image").toString());

                            if(i == (queryDocumentSnapshots.size()-1)){
                                //now download the images and place them into the proper view
                                for(int z = 0; z < sentPicsURLS.size(); z++){


                                }

                            }
                        }

                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {

                }
            });

Здесь изображения должны быть извлечены и помещены в сетку:

for(int z = 0; z < sentPicsURLS.size(); z++){
         //right here    
}

Но у меня возникли проблемы создание адаптера, который может справиться с этим. У меня есть действительный вид сетки в упражнении, и у меня есть файл макета, который содержит вид изображения с идентификатором.

final ArrayAdapter arrayAdapter = new ArrayAdapter(Chatroom.this, R.layout.chatroom_sent_images,R.id.sent_iv);
    sentPics.setAdapter(arrayAdapter);
    sentPics.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //empty for now
        }
    });

Часть, которую я пропускаю (кажется, там), где я на самом деле прошел от * oop до sentPicsURLS, а затем добавьте их в адаптер ... может быть с чем-то вроде arrayAdapter.addAll(sentPicsURLS); внутри //right here для l oop?

Прямо сейчас вид сетки отображается пустым даже без включенного представления изображения по умолчанию в R.layout.chatroom_sent_images. Я чувствую себя так близко, что мне не хватает? Спасибо!

Редактировать Вот моя структура базы данных чата, каждое сообщение чата и сообщения чата структурированы одинаково. enter image description here

1 Ответ

1 голос
/ 24 марта 2020

Как я вижу на вашем скриншоте, ваш документ содержит только одну image. Таким образом, чтобы решить эту проблему, нет необходимости в дополнительном внутреннем параметре -l oop. Чтобы создать список этих изображений, используйте следующие строки кода:

Query chatRoomMsgs = db.collection("chatrooms").document(chatRoomID)
    .collection("Messages").whereEqualTo("sentby", firebaseAuth.getUid());
chatRoomMsgs.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            ArrayList<String> sentPicsURLS = new ArrayList<>();
            for (QueryDocumentSnapshot document : task.getResult()) {
                sentPicsURLS.add(document.getString("image"));
            }
            //Do what you need to do with your list
            Log.d(TAG, "List size: " + sentPicsURLS.size());
        }
    }
});

Имейте в виду, что API-интерфейсы Firebase являются асинхронными, и вы можете использовать этот список только внутри обратного вызова. Теперь результатом в вашем logcat будет размер вашего списка.

...