我是Android和Firebase编程的新手。我只是建立了一个小型应用程式,目前为止运作良好。但是当涉及到Firebase连接时,我很挣扎。
我遵循了所有基本步骤,尝试了很多,但无法解决。
所以我的问题是:我有一个数据库,它存储ID:ID-> 12345、23456 ... ...,这些ID有多个子代(实际上其他ID:ID-> 23456-> 23456-ValueA,23456- ValueB,...)。我想做的是:
如果单击按钮,应用程序将检查先前输入的字符串是否为ID的子代,因此,如果输入的字符串与任何IDx匹配(例如,用户输入ValueX(“ 23456”),它将检查ID的任何子代是否等于23456)
如果是这样,它应该检查另一个先前输入的字符串是否是此IDx的子级(用户输入ValueY(“ 88888”),请检查23456 Value-A(“ 88888”)是否等于ValueY)。
如果为真,则应显示Value-B(“ Ape”)的值
我将数据库附加为图片。link to the image
感谢您的帮助,非常感谢
干杯
...
public class trackid extends AppCompatActivity {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference IDRef = rootRef.child("ID");
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_trackid);
// findViewById
Button ButtondisplayB = (Button) findViewById(R.id.ButtondisplayB);
EditText ValueX = (EditText) findViewById(R.id.ValueX);
EditText ValueY = (EditText) findViewById(R.id.ValueY);
// Capture if button is clicked
ButtondisplayB.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// HERES WHERE MY QUESTIONS START:
// if ValueX.getText().toString() is in IDRef.child()
//if true: ValueY.getText().toString() equals IDRef.child(ValueX).child(Value-A)
//if true: display IDRef.child(Value-B)
最佳答案
IDRef.child(ValueX.getText().toString())addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists()){
Log.d("Missing","This id is not present in the database");
}else{
String aFromDb = dataSnapshot.child("A-value").getValue(String.class);
if(ValueY.getText().toString.equals(aFromDb)){
String bFromDb = dataSnapshot.child("B-value").getValue(String.class);
Log.d("B value is:",bFromDb)''
}else{
Log.d("not equal","A value not equal to ValueY");
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("Error",".....");
}
});
您可以将ListenerForSingleValueEvent更改为ValueEventListener。
ListenerForSingleValueEvent仅检查数据库一次。