我只想从我的firebase
数据库中检索数据,但我不知道获取该数据的正确方法。这是我在android studio中的错误:
W/ClassMapper: No setter/field for chapterTwo found on class
com.junburg.moon.rockbottom.model.Chapter
W/ClassMapper: No setter/field for chatperOne found on class
com.junburg.moon.rockbottom.model.Chapter
W/ClassMapper: No setter/field for chapterTwo found on class
com.junburg.moon.rockbottom.model.Chapter
W/ClassMapper: No setter/field for chapterOne found on class
com.junburg.moon.rockbottom.model.Chapter
这是我的数据类。这是Chapter.class
模型。
public class Chapter {
private String chaterName;
private String chaterExplain;
public Chapter() {
}
public Chapter(String chaterName, String chaterExplain) {
this.chaterName = chaterName;
this.chaterExplain = chaterExplain;
}
public String getChaterName() {
return chaterName;
}
public void setChaterName(String chaterName) {
this.chaterName = chaterName;
}
public String getChaterExplain() {
return chaterExplain;
}
public void setChaterExplain(String chaterExplain) {
this.chaterExplain = chaterExplain;
}
}
Study.class
型号
public class Subject {
private String subjectName;
private String subjectExplain;
private Chapter chapter;
public Subject() {
}
public Subject(String subjectName, String subjectExplain, Chapter
chapter) {
this.subjectName = subjectName;
this.subjectExplain = subjectExplain;
this.chapter = chapter;
}
public String getSubjectName() {
return subjectName;
}
public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}
public String getSubjectExplain() {
return subjectExplain;
}
public void setSubjectExplain(String subjectExplain) {
this.subjectExplain = subjectExplain;
}
public Chapter getChapter() {
return chapter;
}
public void setChapter(Chapter chapter) {
this.chapter = chapter;
}
}
这是我的addValueEventListener
代码:
private void getStudyData() {
databaseReference.child("study")
.child("subject")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
subjectList.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Subject subject = ds.getValue(Subject.class);
subjectList.add(subject);
Log.d(TAG, "onDataChange: " +
subject.getChapter().getChaterName() +
subject.getChapter().getChaterExplain());
}
studyRecyclerAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
最后,这是我在Firebase数据库中的JSON树。
我尝试了一些方法,但我无法解决此错误。
代码执行不返回Chapter类数据。例如:
subject.getChapter().getChaterName()
subject.getChapter().getChaterExplain()
感谢您处理此问题的帮助。谢谢你的关怀。
答案 0 :(得分:2)
您的POJO类Chapter
中存在多个错误。首先,错误消息清楚地表明缺少chapterOne
和chapterTwo
属性。你需要在你的POJO中。
所以你的Chapter.java
应该是这样的。
public class Chapter {
public ChapterOne chapterOne;
public ChapterTwo chapterTwo;
}
还需要定义ChapterOne
和ChapterTwo
类。
public class ChapterOne extends ChapterDetails {
}
public class ChapterTwo extends ChapterDetails {
}
public class ChapterDetails {
public String chapterName;
public String chapterExplain;
}
请注意,您的chapterName
pojo中的chapterExplain
和Chapter
拼写错误。当前变量名称为chaterName
和chaterExplain
,这是错误的。请修复变量名称。
更新
但是我可以在主题的章节数据中获取数据来改变变量类型 类? List .. Map ..或.. somethnig就是这样。不要上新课 ChapterOne .. ChapterTwo ..
使用您当前的实现,这是不可能的。但是,我建议您的firebase数据库实现稍作更改。让我们以chapter
节点进行修改。
chapter
- chapterDetails
- chapterId : 1
- chapterName : Something one
- chapterExplain : Some explanation
- chapterDetails
- chapterId : 2
- chapterName : Something two
- chapterExplain : Some explanation
如果像上面那样修改firebase数据库结构,那么您可能会遇到以下POJO类。
public class Chapter {
List<ChapterDetails> chapterDetails;
}
public class ChapterDetails {
public Long chapterId;
public String chapterName;
public String chapterExplain;
}
对不起,我问了太多。但同一章节详细信息未加入 Firebases。我试图用chapterId 1和a添加chapterDetail chapterDetail with chapterId 2,但它消失或被替换。
我刚刚展示了一个伪实现。对不起,如果更新的答案有误导性。但是,请使用以下内容在firebase数据库中设置数据。这样您就可以将数据作为firebase中的列表获取。
Firebase ref = new Firebase("<my-firebase-app>/chapter"):
List<Chapter> chapterList = new ArrayList<Chapter>();
// Now populate your chapterList with the chapters
addItemsInYourChapterList();
ref.setValue(chapterList);
现在从firebase数据库中检索数据,如下所示。
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println("There are " + snapshot.getChildrenCount() + " chapters");
for (DataSnapshot chapterSnapshot: snapshot.getChildren()) {
Chapter chapter = chapterSnapshot.getValue(Chapter.class);
// Get your chapter details here.
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
请注意,我仅考虑chapter
节点。根据需要修改代码。
答案 1 :(得分:1)
要从数据库中读取数据,您需要一个DatabaseReference实例:
private DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
然后您可以添加具有setValue()的用户,如下所示:
mDatabase.child("users").child(userId).setValue(user);
请参阅此处的示例,从数据库中检索帖子的详细信息:
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
Post post = dataSnapshot.getValue(Post.class);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
};
mPostReference.addValueEventListener(postListener);