无法使用FirebaseRecyclerAdapter将Firebase JSON转换为Java对象
我有两个活动,一个是创建评估对象,另一个是列出Firebase中的评估对象,但是我遇到了一个问题:POJO可以很好地序列化为JSON,但是无法使用FirebaseRecyclerAdapter将Firebase JSON转换为Java对象,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有两个活动,一个是创建评估对象,另一个是列出Firebase中的评估对象,但是我遇到了一个问题:POJO可以很好地序列化为JSON,但是FirebaseRecyclerAdapter似乎无法将JSON数据返回到对象类型 这是我的对象文件: @IgnoreExtraProperties public class Assessment { private String company; private String industry; private String location; priva
FirebaseRecyclerAdapter
似乎无法将JSON数据返回到对象类型
这是我的对象文件:
@IgnoreExtraProperties
public class Assessment {
private String company;
private String industry;
private String location;
private String product;
private String ownerId;
private String ownerName;
private boolean isDraft;
private boolean isQuickWalk;
private Map<String, Category> categories;
public Assessment() {
// Default constructor required for calls to DataSnapshot.getValue()
}
public Assessment(String companyName, String industryName, String locationName,
String productName, String ownerId, String ownerName, boolean isDraft, boolean isQuickWalk, Map<String, Category> categories) {
this.company = companyName;
this.industry = industryName;
this.location = locationName;
this.product = productName;
this.ownerId = ownerId;
this.ownerName = ownerName;
this.isDraft = isDraft;
this.isQuickWalk = isQuickWalk;
this.categories = categories;
}
public String getCompanyName() {
return company;
}
public String getIndustryName() {
return industry;
}
public String getLocationName() {
return location;
}
public String getProductName() {
return product;
}
public String getOwnerName() {
return ownerName;
}
public boolean getIsDraft() {
return isDraft;
}
public boolean getIsQuickWalk() {
return isQuickWalk;
}
你能给我的任何帮助都将是非常好的,这几天我一直在绞尽脑汁。谢谢 在这一行:
Query query = mEvalRef;
我假设mEvalRef是一个数据库引用,您能否显示它,因为不清楚如何从数据库查询数据
只需添加(mEvalRef),即可找到问题
编辑
在您的(评估)类中,我注意到变量没有setter方法,请为类中的每个变量添加setter,看看这是否有帮助
编辑2
在代码中尝试读取值
去掉这个
FirebaseRecyclerOptions<Assessment> options = new FirebaseRecyclerOptions.Builder<Assessment>()
.setQuery(query, Assessment.class)
.build();
最后,在以下内容中将(私有)更改为(公共):
别忘了在评估课上保留变量的设置器,并像我告诉你的那样公开变量
编辑3
现在,忘记编辑2,按照最初的方式重新键入代码,只需在配置所有内容后执行此操作:
在初始化适配器的方法中,在此之前添加:
mRecyclerView.setAdapter(adapter);
这:
mrreference=FirebaseDatabase.getInstance().getReference();mEvalRef=mReference.child(FIREBASE_评估)代码>是我使用它的方式,其中FIREBASE_ASSESSMENTS
是一个常量,我的FIREBASE结构中的条目是这样的:app | | | | | | | | | | | | |用户| | | |等检查编辑,看看它是否有助于加载setters,我担心没有改变任何东西。从技术上讲,变量不是在调用新评估时设置的,即评估=新评估(a、b、c、d等)代码>?为了涵盖我的所有基础知识,我已验证我的proguard文件设置正确。很高兴能帮助您。
Query query = mEvalRef;
FirebaseRecyclerOptions<Assessment> options = new FirebaseRecyclerOptions.Builder<Assessment>()
.setQuery(query, Assessment.class)
.build();
adapter = new FirebaseRecyclerAdapter<Assessment, ViewDraftsViewHolder>(options)
adapter = new FirebaseRecyclerAdapter<Assessment, ViewDraftsViewHolder>(Assessment.class, R.layout.completed_and_drafts_list_item, ViewDraftsViewHolder.class, query )
@Override
public ViewDraftsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.completed_and_drafts_list_item, parent, false);
return new ViewDraftsViewHolder(view);
}
private static class ViewDraftsViewHolder extends RecyclerView.ViewHolder {
mRecyclerView.setAdapter(adapter);
adapter.startListening();