迭代函数在Firebase,Android Studio上搜索密钥?

时间:2017-11-02 21:16:20

标签: android firebase firebase-realtime-database

您好我正在创建一个在EditText中输入数字的应用程序,如果该数字与Firebase中数据库中的某个键匹配,它将在TextView中显示该键的值。

这是数据库的结构: Structure DB

我遇到的问题是当我在我的EditText中输入“1”并且它在数据库中搜索与其匹配的键时,我可以检索它的值,因为它是第一个孩子(我猜)但是当我输入另一个键(2-5)时,它表示由于我的代码中的else句子而不存在。 我想我不是在迭代整个数据库,所以我可以检索正确的值。

以下是代码:

public class MainActivity extends AppCompatActivity {

private DatabaseReference mDatabase;
private TextView mEstado ;
private Button B_buscar;
private EditText E_buscar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mDatabase = FirebaseDatabase.getInstance().getReference().child("no_orden");

    mEstado = (TextView) findViewById(R.id.estado);

    B_buscar = (Button) findViewById(R.id.B_buscar);

    E_buscar = (EditText) findViewById(R.id.E_buscar);

    B_buscar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String buscar = E_buscar.getText().toString().trim();


            mDatabase.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                        DataSnapshot estado = dataSnapshot.getChildren().iterator().next();
                        if (estado.getKey().toString().equals(buscar)){
                            mEstado.setText("The number #" + buscar + " contains: " + estado);

                        }else{
                            if (buscar.equals("")){
                                mEstado.setText("Enter a valid number.");
                            }else {
                                mEstado.setText("The number #" + buscar + " doesn't exists.");
                            }
                        }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    });
}}

希望有人可以帮助我。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用 for 迭代器,如下所示:

for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                Log.d(TAG, "Key: "+postSnapshot.getKey());
                Log.d(TAG, "Value: "+postSnapshot.getValue());
            }

答案 1 :(得分:0)

所以你试图发送一个名为buscar的字符串,你想检查它的存在,我建议你这样做:

   @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

             //in this part of your code use this

              if(dataSnapshot.hasChild(buscar)){

                //this means the number is found in the database
               }else{

                //this means the number is not found in the database
               }



                    }