2017-11-03 56 views
1

进出口新的Android和火力地堡编程。我只是建立一个小应用程序,它迄今为止工作得很好。但是当谈到Firebase连接时,我正在挣扎。 我跟所有的基本步骤和尝试了很多,但不可能弄明白。所以我的问题:我有一个数据库,它存储ID:ID - > 12345,23456,...,这些ID有多个孩子(其实ID - > 23456 - > 23456- ValueA,23456-ValueB,...)。我想这样做:火力地堡的Android:检索和检查按钮进入数据库点击

  1. 如果一个按钮被点击应用程序检查先前输入的字符串ID的孩子,所以如果enteredstring匹配任何IDX(例如用户输入ValueX(” 23456" ),它会检查任何儿童欧佩克国际发展基金”是否等于23456)
  2. 如果是的话,应该检查是否另一个以前输入的字符串是该IDX的孩子(用户进入VALUE年(‘88888’)检查23456值-A(“88888 “)等于ValueY)。
  3. 如果这是真实的,它应该然后显示值-B(“捉”)

我附数据库作为图片的值。 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) 

回答

2
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检查数据库只有一次。

+0

感谢它的工作原理 – luc