2017-03-06 8 views
0

次のコードでfirebase値を取得しようとしています。次のように私のデータベース構造は次のとおりです。私はこれを行うためのさまざまな方法を試してみましたが、私はこのエラーjava.lang.ClassCastExceptionがあり得るhere..All私はただの運を得ることはありません enter image description herejava.lang.Stringはjava.util.HashMapにキャストできませんエラー

protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_mystatement); 
      listview = (ListView) findViewById(R.id.listview); 
      adapter=new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,list); 
      listview.setAdapter(adapter); 
      dref= FirebaseDatabase.getInstance().getReference(); 
      dref= dref.child("Dog Expenditure"); 

      dref.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        for(DataSnapshot child : dataSnapshot.getChildren()) { 
         HashMap<String, Object> value = (HashMap<String, Object>) child.getValue(); 
         String amount = value.get("amount").toString(); 
         String item = value.get("item").toString(); 
         // This will print out amount and item 
         System.out.println(amount + item); 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
      } 

:javaの。 lang.Stringはjava.util.HashMapにキャストできませんを指すを指す com.example.moses.farm.Mystatement $ 1.onDataChange(Mystatement.java:39)HashMap value =(HashMap)child.getValue() ;コード行。私はそれを行うための正しい方法は、最初に作成することです。このコード

+0

あなたの子供が 'String'を返すかもしれません。それを確認してください... –

+0

これが修正されるかどうかは不明ですが、HashMapにキャストしてはいけません。代わりにキャスト: 'Map value =(Map )child.getValue()' –

答えて

0
DatabaseReference dref = FirebaseDatabase.getInstance().getReference(); 
    dref= dref.child("Dog Expenditure"); 

    dref.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) 
     { 
      HashMap<String,String> value = (HashMap<String,String>)dataSnapshot.getValue(); 
      String amount = value.get("amount"); 
      String item = value.get("item"); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
+0

あなたの検索コードを私に送信してください。私はここにstrundedです –

+0

私はコードを編集しました@SirGeorge私はそれが役立つことを望む – Janwilx72

1
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_mystatement); 
     listview = (ListView) findViewById(R.id.listview); 
     adapter=new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,list); 
     listview.setAdapter(adapter); 
     dref= FirebaseDatabase.getInstance().getReference(); 
     dref= dref.child("Dog Expenditure"); 

     dref.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for(DataSnapshot child : dataSnapshot.getChildren()) { 

        String amount = child.get("amount").toString(); 
        String item = value.get("item").toString(); 
        // This will print out amount and item 
        System.out.println(amount + item); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
     } 

を助ける、ほぼ一週間ここで立ち往生されていますデータモデル:

public class DogExpenditure { 
    private String amount; 
    private String item; 

    public String getAmount() { 
     return amount; 
    } 

    public void setAmount(String amount) { 
     this.amount = amount; 
    } 

    public String getItem() { 
     return item; 
    } 

    public void setItem(String item) { 
     this.item = item; 
    } 
} 

そして、代わりにChildEventListenerを追加します。

dref.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     DogExpenditure dogExpenditure = dataSnapshot.getValue(DogExpenditure.class); 
     System.out.println(dogExpenditure.getAmount()+dogExpenditure.getItem()); 
    } 

    @Override 
    public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onChildRemoved(DataSnapshot dataSnapshot) { 

    } 

    @Override 
    public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}); 
+0

java.lang.ClassCastException:java.lang.Stringはjava.util.HashMapにキャストすることができません –

+0

私は答えを編集しました、これを一度試してください – andrewww

+0

私は何か気づいた非常に奇妙な..私のアンドロイドスタジオコンソール((モニター)私は手動で追加したfirebaseエントリの値を参照してください..私の構造はこのようなものです犬支出--- KeT_eEhkkiKJYOo1hb5 - 金額: "12'000" - アイテム: "gsgag"その後、私は手作業で犬の支出の下にある "xxxx"という名前の子供を追加しましたが、今このユニークな識別子 "KeT_eEhkkiKJYOo1hb5"は表示されませんxxxxは出力されますが、元の値は一意のID番号 –

0

を使用し、これを取得する方法のアイデアを持つ誰もが本当に私に

+0

ねえjava.lang.ClassCastException:java.lang.Stringはjava.util.HashMapにキャストできませんerrror –

0
HashMap<String, Object> value = child.getValue(); 

は、このラインvalue.get( "量")は、この1

+0

@ManfredRadlwimmer java.lang.ClassCastException:java.lang.Stringはjava.util.HashMapにキャストできません –

+0

@SirGeorge答えを書きませんでした。私は単純にin-bowser snippedマークアップを削除しました - それを手伝ってはいけません。 –

+0

オブジェクトを文字列に置き換える – Karthik

0

変更を試みるのtoString();

TO String.valueOf(value.get( "量"))。 それは私の問題を解決しました。

+0

[コードを正しくフォーマットする](https://stackoverflow.com/editing-help) – Dwhitz

関連する問題