如何验证/检查Firebase数据库(Android)中是否存在字符串值

时间:2017-09-28 12:12:30

标签: java android firebase firebase-realtime-database

我为Ingredient创建了AutoCompleteTextView,它非常完美。数据库保存也有效,我已经过测试而没有验证。 如果Firebase db中存在Ingredient,我想将配方添加到DB。 例如,如果RecipeIngredients="milk"配方应保存到DB。

这是我的代码。

DatabaseReference ingDBref = FirebaseDatabase.getInstance().getReference("Ingredients");
DatabaseReference databaseReference=FirebaseDatabase.getInstance().getReference("Recipes");

public void addRecipe(){
        final String RecipeName=RecipeNameEditText.getText().toString();
        final String RecipePrepareTime=PrepareTimeEditText.getText().toString();        
        final String RecipeIngredients=IngredientsACTV.getText().toString();
        final String RecipeDescription=DescriptionEditText.getText().toString();
        final String RecipeDifficulty=DifficultySpinner.getSelectedItem().toString();
        key=databaseReference.push().getKey();

        ingDBref.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot data: dataSnapshot.getChildren()){
                    if(data.child(RecipeIngredients).getValue()!=null){                   

                        Recipes recipes=new Recipes(key,RecipeName,RecipeDifficulty,RecipePrepareTime,RecipeIngredients,RecipeDescription);
                        databaseReference.child(key).setValue(recipes);
                        Toast.makeText(AddRecipeActivity.this,"Saved...",Toast.LENGTH_LONG).show();

                    }
                    else{
                        IngredientsACTV.setText("");
            Toast.makeText(AddRecipeActivity.this,"Error...",Toast.LENGTH_LONG).show();
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

Firebase DB

enter image description here

3 个答案:

答案 0 :(得分:3)

if(data.child("ingredientName").getValue().equals(RecipeIngredients))

解决了我的问题。

答案 1 :(得分:0)

试试这个

mDatabase.child("Ingredients")
                    .addChildEventListener(new ChildEventListener() {
                        @Override
                        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                            Map<String, String> map = (Map<String, String>) dataSnapshot.getValue();

                          String value=map.get("IngredientName"); 
                          // here will be your value of IngredientName

                          if(value.equals("Milk"){
                           // do something
                           }
                        }

                        @Override
                        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                            myDialog.CancelProgressDialog();
                        }

                        @Override
                        public void onChildRemoved(DataSnapshot dataSnapshot) {
                            myDialog.CancelProgressDialog();
                        }

                        @Override
                        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
                            myDialog.CancelProgressDialog();
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                            myDialog.CancelProgressDialog();
                        }
                    });

答案 2 :(得分:0)

这种情况正在发生,因为您正在遍历整个对象。如果条件已满足,则设置该值,否则则为剩余的每个元素触发else部分。

要解决此问题,您可以删除其他部分(如果不需要),或者您需要使用Firebase提供的exists()方法。要实现此目的,只需在同一个数据库引用上附加一个侦听器,并检查该子节点是否存在。

希望它有所帮助。