我需要将数据库中的所有子级“ answer”值放入数组中。
然后,我要将该数组与另一个数组进行匹配。我是编码新手,需要帮助。 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");
}
}
}
答案 0 :(得分:0)
如果使用列表而不是数组,则效率更高,在这种情况下,您可以执行以下操作:
@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
。