Jun*_*urg 5 java android firebase firebase-realtime-database
我只想从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
Run Code Online (Sandbox Code Playgroud)
这是我的数据类。这是一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
还有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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的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) {
}
});
Run Code Online (Sandbox Code Playgroud)
最后,这是我在 Firebase 数据库中的 JSON 树。
我尝试了一些方法,但无法解决这个错误。
代码执行不会返回 Chapter 类数据。例如:
subject.getChapter().getChaterName()
subject.getChapter().getChaterExplain()
Run Code Online (Sandbox Code Playgroud)
我非常感谢您帮助处理这一问题。并感谢您的关心。
您的 POJO 类中有几个错误Chapter。首先,错误消息清楚地表明缺少chapterOne和属性。chapterTwo您的 POJO 中需要它。
所以你的Chapter.java应该看起来像这样。
public class Chapter {
public ChapterOne chapterOne;
public ChapterTwo chapterTwo;
}
Run Code Online (Sandbox Code Playgroud)
并且还需要定义ChapterOne和类。ChapterTwo
public class ChapterOne extends ChapterDetails {
}
public class ChapterTwo extends ChapterDetails {
}
public class ChapterDetails {
public String chapterName;
public String chapterExplain;
}
Run Code Online (Sandbox Code Playgroud)
请注意,您的pojo中的chapterName和 the拼写错误。当前的变量名称是,哪个是错误的。请同时修复变量名称。chapterExplainChapterchaterNamechaterExplain
更新
但是我可以获取数据来更改主题类章节数据中的变量类型吗?列表.. 地图.. 或.. 其他类似的东西。不创建新类 ChapterOne.. ChapterTwo..
根据您当前的实现,这是不可能的。但是,我建议对您的 firebase 数据库实现稍作更改。让我们选取chapter要修改的节点。
chapter
- chapterDetails
- chapterId : 1
- chapterName : Something one
- chapterExplain : Some explanation
- chapterDetails
- chapterId : 2
- chapterName : Something two
- chapterExplain : Some explanation
Run Code Online (Sandbox Code Playgroud)
如果您像上面那样修改 Firebase 数据库结构,那么您可能会想到以下 POJO 类。
public class Chapter {
List<ChapterDetails> chapterDetails;
}
public class ChapterDetails {
public Long chapterId;
public String chapterName;
public String chapterExplain;
}
Run Code Online (Sandbox Code Playgroud)
抱歉我问得太多了。但相同的chapterDetail 未添加到Firebase 中。我尝试添加一个 ChapterId 1 的 ChapterDetail 和一个 ChapterId 2 的 ChapterDetail,但它消失或被替换。
我刚刚展示了一个伪实现。如果更新的答案有误导性,我们深表歉意。但是,请使用以下命令在 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);
Run Code Online (Sandbox Code Playgroud)
现在,从 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());
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,我chapter只考虑节点。根据您的需要修改代码。
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |