我是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仅检查数据库一次。

10-04 17:37