2016-04-10 10 views
1

を使用することができます。setValue()と同じ方法で任意の(Firebaseに優しい)オブジェクトのマップを使用できますか?以下では正常に動作します:Android SDKを使用したJSONプリミティブではなく、Firebase updateChildren()を使用して

私がしようとした場合FbReviewが空のコンストラクタを持つと setValue()内のオブジェクトを使用した自動データ構造(のためのゲッターとの単純なデータホルダークラスがしかし Firebase documentation for setValue()

に示されている

public void addReview(FbReview review, AddCallback callback) { 
    Firebase root = mDataRoot.child(REVIEWS_ROOT).child(review.getReviewId()); 
    root.setValue(review, newAddListener(review, callback)); 
} 

Webページからの同等updateChildren()フォローオン例:私は解析できない定義したFbReviewオブジェクトを示唆してエラーが出る

@Override 
public void addReview(FbReview review, AddCallback callback) { 
    Map<String, Object> updates = new HashMap<>(); 
    updates.put(REVIEWS_ROOT + "/" + review.getReviewId(), review); 
    mDataRoot.updateChildren(updates, newAddListener(review, callback)); 
} 

FirebaseException:私は上記のupdateChildren()のコードを試してみたが文字列(review.getSubject()が言う)のではなくオブジェクトを渡すと、それはdoesnのを解析し、そのオブジェクトを示唆して正常に動作します

FbReview

...クラスにノードの解析に失敗しました updateChildren()で作業してください。

これは間違いありませんか?

答えて

3

updateChildren()メソッドは現在、任意のJavaオブジェクトを受け入れません。プリミティブ型またはプリミティブ型のマップのみを受け入れます。

幸いにも、あなたが簡単にあなたのJavaオブジェクトがJackson ObjectMapperに対応するマップに変換することができます:

Map<String, Object> userMap = new ObjectMapper().convertValue(user, Map.class); 

次にあなたがupdateChildren(に渡している値に値のマップを置くことができます):

Map<String, Object> updatedReview = new HashMap<String, Object>(); 

updates.put(REVIEWS_ROOT + "/" + review.getReviewId(), updatedReview); 
mDataRoot.updateChildren(updates, newAddListener(review, callback)); 

あまりにもこの答えを参照してください:高速応答のためのAndroid Firebase 2.4 IllegalStateException using new ref.updateChildren()

+0

大感謝を!ちなみに、オブジェクトを受け入れるようにupdateChildren()をオーバーロードして、ObjectMapperを最初の行として配置しないのはなぜですか? – chdryra

+0

GoogleからFirebase 9.xに使用するマッパーに関する最新の推奨事項はありますか?私は彼らがもはやジャクソンを使用しないと信じています。 –

+0

SDバージョン9.6では、POJOを 'updateChildren()'に渡すことができます。しかし、あなたが望むなら、あなたはまだジャクソンを自分で使うことができます。 http://stackoverflow.com/questions/37547399/how-to-deserialise-a-subclass-in-firebase-using-getvaluesubclass-class/37548330#37548330を参照してください。 –

関連する問題