2017-03-06 90 views
0

我試圖檢索Firebase值的代碼如下。我的數據庫結構如下: 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) { 

       } 
      }); 
      } 

我已經嘗試了不同的方法來做到這一點,但我不只是得到任何運氣here..All我得到的是這種錯誤java.lang.ClassCastException:JAVA。 lang.String無法轉換爲java.util.HashMap at com.example.moses.farm.Mystatement $ 1.onDataChange(Mystatement.java:39)指向此HashMap值=(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

請將您的檢索代碼發送給我,以便我可以使用我的應用程序進行嘗試。我在這裏strrowded –

+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) { 

      } 
     }); 
     } 

使用此代碼

+0

java.lang.ClassCastException:java.lang.String不能轉換爲java.util.HashMap –

+0

我編輯了答案,試試這個一次 – andrewww

+0

我注意到了一些東西非常奇怪..在我的android studio控制檯((顯示器),我看到我手動添加的firebase條目的值..我的結構就像這樣Dog Expenditure --- KeT_eEhkkiKJYOo1hb5 - amount:「12'000」--item :「gsgag」然後我手動添加了一個叫做amount:「xxxx」的小孩,它仍然在Dog Expenditure之下,但是現在沒有這個唯一標識符「KeT_eEhkkiKJYOo1hb5」。控制檯打印出xxxx,但沒有唯一識別符的原始值 –

0

做是先創建正確的方法數據模型:

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

hey java.lang.ClassCastException:java.lang.String不能轉換爲java.util.HashMap errror –

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

嘗試這一個

+0

@ManfredRadlwimmer java.lang.ClassCastException:java.lang.String不能轉換爲java.util.HashMap –

+0

@SirGeorge我沒有寫出答案,karthi沒有。我只是簡單地刪除了內嵌的剪輯標記 - 不能幫助你。 –

+0

將對象替換爲字符串 – Karthik

0

改變這一行value.get( 「量」)的toString();

TO

將String.valueOf(value.get( 「量」)); 它解決了我的問題。

+0

請[請正確格式化您的代碼](https://stackoverflow.com/editing-help) – Dwhitz

相關問題