Firebase получает все дочерние значения и сохраняет их в массиве - PullRequest
0 голосов
/ 08 мая 2019

Мне нужно получить все дочерние "ответные" значения из базы данных в массив.

После этого я хочу сопоставить этот массив с другим массивом. Я новичок в кодировании, мне нужна помощь. Моя база данных связана здесь. Я попробовал это с моим кодом ниже, но я думаю, что моя логика неверна, и я не могу сопоставить stringArray с ProductArray.

public class Activity extends AppCompatActivity {

    private String[] stringArray = new String[3];
    private String[] ProductArray = new String[]{"traveling","short","not much"};

    private TextView productTwo;
    private DatabaseReference mRef;

    private int mQuestionNumber = 1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recommendations);

        productTwo = (TextView) findViewById(R.id.recommendations_product2);

        mRef = FirebaseDatabase.getInstance().getReference().child("BTSpeakers").child(String.valueOf(mQuestionNumber));
        mRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                if(dataSnapshot.exists())
                {
                    String Answer = dataSnapshot.child("answer").getValue().toString();

                    //Store Answer values of Database in Array
                    stringArray[mQuestionNumber] = Answer;
                }
            }

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

            }
        });
        mQuestionNumber++;

        //If array values equals ProductArray then , setText To Product2
        if(ProductArray.equals(stringArray))
        {
            productTwo.setText("Speakers");
        }
    }
}

1 Ответ

0 голосов
/ 08 мая 2019

Более эффективно, если вы используете список вместо массива, в вашем случае вы можете сделать следующее:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recommendations);

    productTwo = (TextView) findViewById(R.id.recommendations_product2);

    List<String> productList = new ArrayList<String>(); 
    list.add("traveling"); 
    list.add("short"); 
    list.add("not much");

    List<String> answerList = new ArrayList<String>();
    mRef = FirebaseDatabase.getInstance().getReference().child("BTSpeakers");
    mRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            if(dataSnapshot.exists())
            {
                for(DataSnapshot ds : dataSnapshot.getChildren()){
                String answer = ds.child("answer").getValue().toString();
                answerList.add(answer);
                if(productList.equals(answerList)){
                    productTwo.setText("Speakers");
                }

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

        }
    }

Сначала добавьте элементы в список, затем добавьте ссылку на ваш родительский узелBtSpeakers, затем выполните цикл внутри своего снимка и получите все answers.

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