【问题标题】:Firebase get all child values and store in an arrayFirebase 获取所有子值并存储在数组中
【发布时间】:2019-05-08 09:35:57
【问题描述】:

我需要将数据库中的所有子“答案”值放入一个数组中。

之后,我想将该数组与另一个数组进行匹配。我是编码新手,我需要帮助。 My Database is linked here. 我用下面的代码试过了,但我认为我的逻辑是错误的,我无法将 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");
        }
    }
}

【问题讨论】:

    标签: java android arrays firebase arraylist


    【解决方案1】:

    如果你使用列表而不是数组,效率会更高,你可以这样做:

    @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

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      相关资源
      最近更新 更多