2017-07-26 2 views
-2

構造を使用してAndroidアプリにFirebaseから子供の属性を取得します。プレーンテキストフィールドに "Apple"や "Orange"などの文字が入力されます。は私のデータベースのValueEventListener

これは私がデータを取得するために使用していますが、私のアプリは、私はそれをrnをするときクラッシュするコードです:

bdata.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(Diet.this, "here", Toast.LENGTH_SHORT).show(); 
      final String food_item = etfooditem.getText().toString().trim(); 
      Toast.makeText(Diet.this, food_item, Toast.LENGTH_SHORT).show(); 
    databasesReference.addValueEventListener(new com.google.firebase.database.ValueEventListener() { 
     @Override 
     public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) { 
      for (com.google.firebase.database.DataSnapshot ds : dataSnapshot.child("Food_Databse").getChildren()) { 
       Getters getter; 
       getter = (Getters) ds.getValue(); 
       if (food_item == getter.getName()) { 

        String abc = getter.getCal(); 
        Toast.makeText(Diet.this, abc, Toast.LENGTH_SHORT).show(); 
        break; 
       }else{ 
        Toast.makeText(Diet.this, "Failed", Toast.LENGTH_SHORT).show(); 
       } 
       //getter.getCarb(); 
       //getter.getFat(); 
       //getter.getPro(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

     } 


    }); 
+1

ゲッターとは何ですか? –

+0

あなたのログインタグを投稿する –

答えて

0

最初のiは、キー

Query foodsQuery = database.getReference("Food_Databse"); 
foodsQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for(DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
       Food food = postSnapshot.getValue(Food.class); 
       //don't need it if you add name child field (see comment in class) 
       food.name = postSnapshot.getKey(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    } 
); 
に追加の名前フィールドを追加することをお勧めしますあなたは、食品のクラスを作成することもできます

(別のファイルに!!)

public class Food { 
    String name = ""; 
    int calories; 
    int carbohydrates; 
    int fat; 
    int protein; 

    public Food() { 
    } 

    /* 
    //uncomment iff you add name child field in database 
    public int getName() { 
     return id; 
    } 
    public void setName(String val) { 
     this.id = id; 
    } 
    */ 
    public int getCalories() { 
     return id; 
    } 
    public void setCalories(int val) { 
     this.id = id; 
    } 
    public int getCarbohydrates() { 
     return id; 
    } 
    public void setCarbohydrates(int val) { 
     this.id = id; 
    } 
    public int getFat() { 
     return id; 
    } 
    public void setFat(int val) { 
     this.id = id; 
    } 
    public int getProtein() { 
     return id; 
    } 
    public void setProtein(int val) { 
     this.id = id; 
    } 
} 

代わりのFoをを使用してODクラスあなたは

HashMap<String, Object> map = (HashMap<String, Object>)postSnapshot.getValue() 

を使用することができ、またはすべての値が整数である場合:あなたの問題を解決するために

HashMap<String, Integer> map = (HashMap<String, Integer>)postSnapshot.getValue() 
0

、このコードを使用してください:

EditText editText = (EditText) findViewById(R.id.edit_text); 
String fruit = editText.getText().toString(); 

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference fruitRef = rootRef.child("Food-Databse").child(fruit); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String calories = ds.child("Calories").getValue(String.class); 
      String carbohydrates = ds.child("Carbohydrates").getValue(String.class); 
      String fat = ds.child("Fat").getValue(String.class); 
      String protein = ds.child("Protein").getValue(String.class); 
      Log.d("TAG", calories + "/" + carbohydrates + "/" + fat + "/" + protein); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
fruitRef.addListenerForSingleValueEvent(eventListener); 

は、私が使用していることに注意してくださいFood-Databse私はあなたのスクリーンショットに表示されていますが、通常はFood-Databaseではありません。

希望します。

関連する問題