2016-05-07 4 views
2

Firebaseのバグか、Androidのバグか、自分の責任かわかりません。私の問題は、子供をフェッチするときに何らかの理由でHashmapからDouble値を取得できないということです。どうして?したがって、firebase jsonオブジェクトに格納されているすべての数値は、HashMapからLongとして返されます。もっと奇妙なことは?デバッガを使用して、私は実際にAndroidスタジオがちょっとdouble/floatであることを知っていました。フェッチする値が2.5の場合、キー "string"のハッシュマップの値は2.5です。HashMap StringからDouble値を取得しようとしたときにエラーが発生しました.Firebaseからフェッチされたオブジェクト

この値を二重変数に割り当てると、上記のエラーが出力されます。私は反復がマップの値をチェックすることをデバッグする必要がある場合

これは、コード

final double[] rating = {0}; 
final int[] nRatings = {0}; 
Firebase ref = new Firebase("https://MYAPP.firebaseio.com/reviews"); 
Query queryRef = ref.orderByChild("idCommented").equalTo(mId); 
queryRef.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot snapshot, String previousChild) { 
     System.out.println(snapshot.getKey()); 

     Map map = (HashMap) snapshot.getValue(); 
     rating[0] += (double) map.get("noStars"); // This line causes error 
     nRatings[0]++; 

     mRatingBar.setRating((float)rating[0]/nRatings[0]); 
    } 
... 
}); 

は、まだある、それはロング

これがなぜ起こるかすべてのアイデアを倍増するためにキャストすることができないことを印刷するのでしょうか?

+1

をエラーメッセージは非常に明示的である:値は(整数)の長さであるので、二重にキャストすることはできません。値が浮動小数点として格納されていることを確認してください(つまり、「1」ではなく「1.0」を格納してください)。または、解析時にdoubleに変換します:http://stackoverflow.com/questions/13855786/java-many-ways-of-casting-a-long-object-to-double –

+0

'Map map =(HashMap roarster

+1

ロースターマップは文字列のような他の値型を格納できる必要があるので、私はそれを行うことはできません。フランクはNumberへのキャストを行い、次にdoubleValueが働きました。問題は、「1.5」のような数字でさえ早く起こっていた – BlackBox

答えて

1

floatをFirebaseに保存すると、DoubleまたはLongのいずれかが返されます。

これは動作します:

// ... 
@Override 
public void onChildAdded(DataSnapshot snapshot, String previousChild) { 

    Number priceN = (Number) snapshot.getValue(); // Long or Double 
    float price = priceN.floatValue(); 

    // (do whatever you want with the float) ... 

} 
//... 
関連する問題