2017-02-26 19 views
0

Firebaseでリアルタイムデータベースからデータを取得しようとしましたが、例外であるcannot cast hash map to stringでクラッシュします。私は多くのチュートリアルや選択肢に従っていましたが、私のデータベースは以下のようなもので、私のアプリケーションはキーと値をペアにすることができないため、何もできません。Firebaseからデータを取得中にAndroidアプリケーションがクラッシュする

私にこれを手伝ってください。私は自分のコードとデータベースのスクリーンショットを以下に添付しました。前もって感謝します。

My firebase database image

public class AlaCarte extends AppCompatActivity { 

    ListView lv; 
    String arr[]=new String[]{"Paneer Butter Masala","Chicken Butter Masala","Chicken Biriyani"}; 
    ArrayList al=new ArrayList(); 
    ArrayList food=new ArrayList(); 
    Button btn; 


    Firebase mref; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ala_carte); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setTitle("Alacarte!!"); 

     lv=(ListView)findViewById(R.id.listView); 
     btn=(Button)findViewById(R.id.button8); 


     DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference("Food items"); 

     databaseReference.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) { 
       Iterable<com.google.firebase.database.DataSnapshot> iterable=dataSnapshot.getChildren(); 
       Iterator<com.google.firebase.database.DataSnapshot> it=iterable.iterator(); 
       while (it.hasNext()) 
       { 
        com.google.firebase.database.DataSnapshot dataSnapshot1=it.next(); 
        String catnane=dataSnapshot1.getKey(); 
        Iterable<com.google.firebase.database.DataSnapshot> iterable2=dataSnapshot1.getChildren(); 
        Iterator<com.google.firebase.database.DataSnapshot> it2=iterable2.iterator(); 
        while (it2.hasNext()) 
        { 
         String proname=dataSnapshot1.getKey(); 
         String price=(String)dataSnapshot1.getValue(); 
         String item=proname+" "+price; 
         food.add(item); 
        } 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

     ArrayAdapter<String> aa=new ArrayAdapter<String>(AlaCarte.this,android.R.layout.simple_list_item_multiple_choice,food); 
     lv.setAdapter(aa); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       CheckedTextView checkedTextView = ((CheckedTextView) view); 
       //checkedTextView.setChecked(!checkedTextView.isChecked()); 
       if (checkedTextView.isChecked()) { 
        checkedTextView.setChecked(false); 
        al.remove(adapterView.getItemAtPosition(i)); 
       } else { 
        checkedTextView.setChecked(true); 
        al.add(adapterView.getItemAtPosition(i)); 
       } 

      } 
     }); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       if (al.isEmpty()) { 
        Snackbar.make(view, "Select check boxes to place your order", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } else { 
        Intent i = new Intent(AlaCarte.this, ConfirmAlacarte.class); 
        i.putExtra("mylist", al); 
        startActivity(i); 

       } 
      } 
     }); 
    } 

} 
+0

logcat出力を追加できますか? – Mohamed

答えて

0
String price=(String)dataSnapshot1.getValue() 
API reference

によれば、は、これらのいずれであってもよいです。

値は、このスナップショットに含まれるデータをネイティブタイプとして返​​します。返さ可能なタイプは次のとおり

BOOL

長いストリング

ダブル

たIDictionary {文字列、オブジェクト}

リスト{オブジェクト}このリストは再帰的です。上記のリストのオブジェクトの可能な型は、同じリストによって与えられます。これらの型は、JSONで使用できる型に対応しています。

キャストする前に確認してください。

1

価格は数値として保存しますが、文字列として取得しようとしています。

public void onDataChange(DataSnapshot foodItemsSnapshot) { 
    for (DataSnapshot categorySnapshot: foodItemsSnapshot.getChildren()) { 
    String categoryName = categorySnapshot.getKey(); 
    for (DataSnapshot foodItemSnapshot: categorySnapshot.getChildren()) { 
     String foodItemName = foodItemSnapshot.getKey(); 
     Integer price = foodItemSnapshot.getValue(Integer.class); 
     String description = foodItemName+" "+price; 
    } 
    } 
} 

これが特定のアイテムで失敗した場合は、データ構造のルールに準拠していない可能性があります。そのような場合は、ツリーのその特定のセクションのJSONを質問に含めます。スクリーンショットではなくテキストとしてJSONを含めると、助けがはるかに簡単です。 your Firebase Database consoleのExport JSONリンクをクリックすると、このテキストを簡単に取得できます。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。

関連する問題