2017-09-28 1 views
2

Ich habe AutoCompleteTextView für Ingredient erstellt, es funktioniert perfekt. Das DB-Speichern funktioniert auch, ich habe es ohne Validierung getestet. Wenn Bestandteil in Firebase db vorhanden ist, möchte ich ein Rezept zu DB hinzufügen. Zum Beispiel, wenn RecipeIngredients="milk" Rezept in DB gespeichert werden soll.Wie kann ich validieren/überprüfen, ob in Firebase-Datenbank (Android) ein String-Wert vorhanden ist

Hier ist mein Code.

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

+1

Was ist der Fehler in Ihrem Code? –

+0

Es immer die "else" Anweisung – Chris

+0

Was ist der Wert von 'RezeptZutaten'? Können Sie das Problem mit einem fest codierten Wert reproduzieren? –

Antwort

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

Mein Problem gelöst.

0

Versuchen Sie, diese

  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(); 
         } 
        }); 
0

Dies geschieht, weil Sie durch das ganze Objekt Looping. Wenn die Bedingung erfüllt ist, legen Sie diesen Wert fest, andernfalls wird der else-Teil für jedes der verbleibenden Elemente ausgelöst.

Um dies zu beheben, können Sie den else-Teil entfernen, wenn Sie ihn nicht benötigen, oder Sie müssen die von Firebase bereitgestellte Methode exists() verwenden. Um dies zu erreichen, hängen Sie einfach einen Listener an dieselbe Datenbankreferenz an und prüfen Sie, ob das Kind existiert.

Ich hoffe, es hilft.

+0

Ich habe diesen Weg 'if versucht (data.child (RecipeIngredients) .exists())'. Die Ergebnisse waren auch die gleichen. – Chris

+0

Sie müssen es für das bestimmte Kind verwenden. Dieser Schlüssel sollte ein String und kein Objekt sein. –

+0

'RecipeIngredients' ist String, Sie können oben in meinem Code sehen: ' String RecipeIngredients = IngredientsACTV.getText(). ToString(); ' – Chris

Verwandte Themen