Получить детей в JSON DataSnapshot - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь получить детей из моего JSON отдельно и передать их через намерение. Вот как отформатирован мой JSON:

  "allDeeJays" : {
    "-LeP1DB6Onzh4-UiN_0E" : {
      "acct" : "Aaron A",
      "djName" : "uhgvvvbbb"
    }
  },

Используя DataSnapshot, я смог получить значения djName, но я не получаю значения acct со следующим кодом:

 @Override
                    protected void onBindViewHolder(@NonNull ResultsViewHolder holder, final int position, @NonNull final DataSnapshot snapshot) {
                        // Here you convert the DataSnapshot to whatever data your ViewHolder needs
                        String s = "";
                        for(DataSnapshot ds : snapshot.getChildren())
                        {
                            s = ds.getValue(String.class);
                            DjProfile model = new DjProfile(s);
                            model.setDjName(s);

                            holder.setDjProfile(model);
                        }

                        holder.itemView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view)
                            {

                                DatabaseReference ref = FirebaseDatabase.getInstance().getReference("allDeeJays");

                                String acct = "";
                                String name = "";

                                for(DataSnapshot ds : snapshot.getChildren())
                                {
                                    name = ds.getValue(String.class);
                                    acct = ds.getValue(String.class);
                                    DjProfile model = new DjProfile(name);
                                    model.setDjName(name);
                                }
                                Intent i = new Intent(getApplication(), AddSongRequest.class);
                                i.putExtra("DjName", name);
                                i.putExtra("UserAcct", acct);
                                startActivity(i);
                            }
                        });
                    }
                };

Наконец, мой класс DjProfile определен следующим образом: пакет com.example.android.heydj;

import com.google.firebase.database.Exclude; import com.google.firebase.database.PropertyName;

public class DjProfile
{
    String djName;
    String key;


    public DjProfile(String djName)
    {
        this.djName = djName;
    }
    public DjProfile(){}

    public void setDjName(String djName)
    {
        this.djName = djName;
    }

    public String getdjName()
    {
        return djName;
    }
}

Обе переменные возвращают одно и то же значение, и когда я запускаю snapshot.getChildrenCount(), он говорит, что есть два потомка (я полагаю, это acct и djName). Нужно ли добавлять дополнительные геттеры и сеттеры для имени учетной записи? Любая помощь с благодарностью:)

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Попробуйте, как это, и он вернет точное значение для ваших ключей

if(snapShot.getKey().equalsIgnoreCase("djName"))
name = ds.getValue(String.class);

if(snapShot.getKey().equalsIgnoreCase("acct"))
acct = ds.getValue(String.class);

или используйте

  DjProfile model = snapShot.getValue(DjProfile.class);

вместо

 for(DataSnapshot ds : snapshot.getChildren())
                            {
                                name = ds.getValue(String.class);
                                acct = ds.getValue(String.class);
                                DjProfile model = new DjProfile(name);
                                model.setDjName(name);
                            }
0 голосов
/ 09 мая 2019

Вы можете решить эту проблему, добавив строку ниже -

DjProfile profile = ds.getValue(DjProfile.class);

Теперь вы можете передать этот профиль в Intent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...