Как извлечь данные из uploadID зависит от userID, который загружает картинку? - PullRequest
0 голосов
/ 08 января 2019

Каждый раз, когда пользователь загружает изображение, которое он публикует в фиде, я получаю свой реселлер. Пользователь может нажать на изображение внутри канала. Но проблема в том, что я получаю неправильные данные. Я хочу показать там описание, имя загрузчика и т. Д. (См. Базу данных Firebase в разделе «Загрузка»)

        mFirebaseDatabase.getReference("uploads/" + getIntent().getStringExtra("uploadID")).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // ...
            for (DataSnapshot childSnapshot: dataSnapshot.getChildren()){


                tvUserInfo.setText(String.valueOf(dataSnapshot.child("desc").getValue()));

                tvUserDesc.setText(String.valueOf(dataSnapshot.child("mName").getValue()));

            }

Вот где я добавляю Extra на uploadID

@Override
public void onItemClick(int position) {
    Toast.makeText(getContext(), "Normal Click at position" + position, Toast.LENGTH_SHORT).show();


    String uploadId = mDatabaseRef.push().getKey();

    Intent intent = new Intent(getContext(), BookProfile.class)

            .putExtra("uid", mUploads.get(position).getUserId())
            .putExtra("imagengpost", mUploads.get(position).getmImageUrl())
            .putExtra("title", mUploads.get(position).getmName())
            .putExtra("desc", mUploads.get(position).getDesc())
            .putExtra("uploadID", uploadId);

    Toast.makeText(getActivity(), "Testing uploadID : " + uploadId, Toast.LENGTH_SHORT).show();

    startActivity(intent);


}

База данных Firebase в реальном времени enter image description here

1 Ответ

0 голосов
/ 08 января 2019

Вы добавляете слушателя в /uploads/$uploadid, чтобы слушатель считывал снимок одной загрузки. В этом случае snapshot в onDataChange предназначен для одной загрузки, поэтому вам не нужно зацикливаться на snapshot.getChildren().

SoL

mFirebaseDatabase.getReference("uploads/" + getIntent().getStringExtra("uploadID")).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        tvUserInfo.setText(String.valueOf(dataSnapshot.child("desc").getValue()));
        tvUserDesc.setText(String.valueOf(dataSnapshot.child("mName").getValue()));
    }

Обратите внимание, что ваш код также не работает в том случае, если у вас do есть несколько дочерних элементов, поскольку вы обращаетесь к dataSnapshot внутри цикла, где вы, вероятно, захотите childSnapshot в этом случай:

public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot childSnapshot: dataSnapshot.getChildren()){
        tvUserInfo.setText(String.valueOf(childSnapshot.child("desc").getValue()));
        tvUserDesc.setText(String.valueOf(childSnapshot.child("mName").getValue()));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...