使用旧的Firebase SDK,DataSnapshot.getValue(Class aClass)方法能够从数据库中获取一个简单的字符串值,如:
"id": "name"
如果给定的类只有一个名为String value
的属性,则返回一个POJO实例。这允许可以重复使用FirebaseAdapter
的可重用实现,它可以同时处理复杂对象以及简单字符串。也许旧SDK中的行为是无意的,并且由于代码库中的一些更改而不再起作用。
除了创建一个全新的适配器之外,还有任何解决方法的建议吗?
编辑:完整示例 这个JSON片段代表我的整个数据库:
{
"test" : {
"id" : "value"
}
}
然后我使用以下代码查询此条目,该代码仅包含onChildAdded
中的相关代码,以便尽可能简单:
DatabaseReference ref = FirebaseDatabase.getInstance().getReferenceFromUrl("https://<MYPROJECT>.firebaseio.com");
Query query = ref.child("test");
query.addChildEventListener(new com.google.firebase.database.ChildEventListener() {
@Override
public void onChildAdded(com.google.firebase.database.DataSnapshot dataSnapshot, String s) {
Record record = dataSnapshot.getValue(Record.class);
}
@Override
public void onChildChanged(com.google.firebase.database.DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(com.google.firebase.database.DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(com.google.firebase.database.DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
POJO Record
看起来像这样:
public class Record {
private String value;
public Record() { }
public Record(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
使用旧的JSON映射使用名为“value”的属性和带有一个字符串参数的构造函数。现在getValue(Record.class)崩溃了
无法将java.lang.String类型的对象转换为类型 com.journeytags.journeytagsandroid.model.Record。
当然,使用此构造获取单个字符串似乎是不必要的,但是,我在通用上下文中使用它,这有助于我避免针对此特殊情况的其他代码。