android - 如何从android中的firebase获取对象?

标签 android firebase firebase-realtime-database

我有这样的用户类别

public class User{
int id;
String description;
String shortDescription;
String photo;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getShortDescription() {
    return shortDescription;
}

public void setShortDescription(String shortDescription) {
    this.shortDescription = shortDescription;
}

public String getPhoto() {
    return photo;
}

public void setPhoto(String photo) {
    this.photo = photo;
}
}

我正在使用 FirebaseRecyclerAdapter 获取存储在我的 firebase 上的用户,如下所示

 FirebaseRecyclerAdapter<User, UserHolder> adapter =
            new FirebaseRecyclerAdapter<User, UserHolder>(
                    User.class,
                    android.R.layout.two_line_list_item,
                    UserHolder.class,
                    mRef) {
                @Override
                protected void populateViewHolder(UserHolder userHolder, User u, int i) {
                    userHolder.mText.setText(u.getDescription());
                }
            };

但问题是当用户对象的 firebase 键类似于

 > -KDY9Pna7XqgFkyCHKFJ

工作正常,但如果firebase键是这样的

 > c5755a68-69a7-4464-956e-c2f94d9b387d

这个唯一ID然后它给出一个错误

> com.firebase.client.FirebaseException: Failed to bounce to type
FATAL EXCEPTION: 
main Process: in.rofr, PID: 12399
com.firebase.client.FirebaseException: Failed to bounce to type
at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183)
at com.firebase.ui.FirebaseRecyclerAdapter.parseSnapshot(FirebaseRecyclerAdapter.java:161)
at com.firebase.ui.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:150)
at com.firebase.ui.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:190)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5465)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5498)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4735)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4611)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1988)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1384)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1347)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3026)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2903)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3277)
at android.view.View.layout(View.java:15689)
at android.view.ViewGroup.layout(ViewGroup.java:5040)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15689)
at android.view.ViewGroup.layout(ViewGroup.java:5040)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15689)
at android.view.ViewGroup.layout(ViewGroup.java:5040)
at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1183)
at android.view.View.layout(View.java:15689)
at android.view.ViewGroup.layout(ViewGroup.java:5040)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15689)
at android.view.ViewGroup.layout(ViewGroup.java:5040)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15689)
at android.view.ViewGroup.layout(ViewGroup.java:5040)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15689)
at android.view.ViewGroup.layout(ViewGroup.java:5040)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15689)
at android.view.ViewGroup.layout(ViewGroup.java:5040)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
at android.view.View.layout(View.java:15689)
at android.view.ViewGroup.layout(ViewGroup.java:5040)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2116)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1873)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)

确切的问题是什么,我不明白任何人都可以帮助我吗?

提前致谢!!!

最佳答案

尝试将 @JsonIgnoreProperties(ignoreUnknown = true) 像这样放在类的顶部

@JsonIgnoreProperties(ignoreUnknown = true)
public class UserModel {

}

这可能有效,因为 Firebase 使用 Jackson 库来序列化/反序列化 JSON,并且使用 @JsonIgnoreProperties(ignoreUnknown = true) 会忽略新属性(未在类中声明的属性),如此处所述 https://stackoverflow.com/a/5455563/2331705

关于android - 如何从android中的firebase获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36177175/

相关文章:

android - 在 Android 11 上构建文件资源管理器

android - 由于 java.lang.IllegalArgumentException : column '_id' does not exist,应用程序在启动时崩溃

swift - 在 firebase 上使用 facebook 登录的正确方法是什么? swift

javascript - 使用 endAt 加载更多数据

java - 我有一个 firebase 数据库,我想从中访问一些嵌套节点,然后将数据列表添加到该特定节点

java - ids 无法解析或不是字段

android - 使用 removeCallbacks

firebase - 分析 Firebase 数据

angularjs - 当 promise 链中有错误时如何回滚更改

firebase - Angularfire2如何组合两个列表