Java Android Firebase将数据检索回gridView
我是编程新手,刚开始做我的第一个android项目。我已经陷入这个问题好几个小时了,仍然不知道为什么它不起作用。下面是数据结构 我想为各自的用户添加日志,我实现的addJournal()函数正在运行。但是当我从数据库中检索这些日志到gridView时,它崩溃了 以下是我如何将日记添加到以下数据库:Java Android Firebase将数据检索回gridView,java,android,Java,Android,我是编程新手,刚开始做我的第一个android项目。我已经陷入这个问题好几个小时了,仍然不知道为什么它不起作用。下面是数据结构 我想为各自的用户添加日志,我实现的addJournal()函数正在运行。但是当我从数据库中检索这些日志到gridView时,它崩溃了 以下是我如何将日记添加到以下数据库: firebaseAuth = FirebaseAuth.getInstance(); firebaseUser = firebaseAuth.getCurrentUs
firebaseAuth = FirebaseAuth.getInstance();
firebaseUser = firebaseAuth.getCurrentUser();
journalReference=FirebaseDatabase.getInstance().getReference();
String journalName = etJournalName.getText().toString().trim();
String companyName = etCompanyName.getText().toString().trim();
String journalColor = "blankForNow";
String userID = firebaseUser.getUid();
String journalID = journalReference.push().getKey();
//validation
if (TextUtils.isEmpty(journalName)){
etJournalName.setError("Journal name must not be empty");
} else if (TextUtils.isEmpty(companyName)){
etCompanyName.setError("Company name must not be empty");
} else {
//storing data to the database...
Journal journal = new Journal(journalID, userID, journalName, companyName, journalColor);
journalReference.child("users")
.child(userID)
.child("journals")
.child(journalID).setValue(journal);
}
下面是我检索数据的方法:
DatabaseReference journalRef =
FirebaseDatabase.getInstance().getReference();
journalRef.child("users")
.child(userID)
.child("journals").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
journalArrayList.clear();
for (DataSnapshot journalDS : dataSnapshot.getChildren()) {
Journal journal = journalDS.getValue(Journal.class);
journalArrayList.add(journal);
}
gridViewAdapter = new GridViewAdapter(MainActivity.this, journalArrayList);
gridView.setAdapter(gridViewAdapter);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, Strin
有人能帮我吗?
提前感谢使用
addListener for SingleValueEvent
代替addChildEventListener
希望这对你有帮助
DatabaseReference journalRef =FirebaseDatabase.getInstance().getReference();
journalRef.child("users").child(userID).child("journals").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
journalArrayList.clear();
for (DataSnapshot journalDS : dataSnapshot.getChildren()) {
Journal journal = journalDS.getValue(Journal.class);
journalArrayList.add(journal);
}
gridViewAdapter = new GridViewAdapter(MainActivity.this, journalArrayList);
gridView.setAdapter(gridViewAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
编辑
ValueEventListener
获取单个数据束中的所有数据,其中asChildEventListener
逐个获取特定节点的数据记录。
我建议你试试。为每个ValueEventListener
和ChildEventListener
创建一个代码段,检查行为
编辑1
您获得NullPointerException只是因为您没有初始化journalArrayList
列表
初始化您的列表
journalArrayList=new ArrayList<>()
journalArrayList=newArrayList()
编辑2您可以使用下面的“地图尝试”解决方案获取值
for (DataSnapshot journalDS : dataSnapshot.getChildren()) {
Map<String, String> map = (Map<String, String>) journalDS.getValue();
String journalName = map.get("journalName");
String companyName = map.get("companyName");
String journalColor = map.get("journalColor");
String userID = map.get("userID");
String journalID = map.get("journalID");
Journal journal = new Journal(journalID, userID, journalName, companyName, journalColor);
journalArrayList.add(journal);
}
for(DataSnapshot日志:DataSnapshot.getChildren()){
Map Map=(Map)journalDS.getValue();
字符串journalName=map.get(“journalName”);
字符串companyName=map.get(“companyName”);
字符串journalColor=map.get(“journalColor”);
字符串userID=map.get(“userID”);
字符串journalID=map.get(“journalID”);
日记账=新日记账(journalID、userID、journalName、companyName、journalColor);
journalArrayList.add(日记账);
}
使用Get和set方法尝试以下代码
public class Journal {
private String journalID;
private String userID;
private String journalName;
private String companyName;
private String journalColor;
public Journal() {
}
public Journal(String journalID, String userID, String journalName, String companyName, String journalColor) {
this.journalID = journalID;
this.userID = userID;
this.journalName = journalName;
this.companyName = companyName;
this.journalColor = journalColor;
}
public String getJournalID() {
return journalID;
}
public void setJournalID(String journalID) {
this.journalID = journalID;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getJournalName() {
return journalName;
}
public void setJournalName(String journalName) {
this.journalName = journalName;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getJournalColor() {
return journalColor;
}
public void setJournalColor(String journalColor) {
this.journalColor = journalColor;
}
}
D/Journal:=>DataSnapshot{key=-ksvqm79ass1bpugngb,value={userID=qazq0h3e8oaun09skg0hwhffdt2,journalName=Journals001,journalID=-ksvqm79ass1bpugngb,companyName=com001,journalColor=blankForNow} 09-01 21:20:20.364 30374-30374/com.colla.sdpjournal D/Journal:=>DataSnapshot{key=-KsvzWaNFsYX488MLSIK,value={userID=qAzq0h3E8oaUn09SkG0hWhFfTDT2,journalName=Journal007,journalID=-KsvzWaNFsYX488MLSIK,companyName=com007,journalColor=blankForNow} 09-01 21:20:20.364 30374-30374/com.colla.sdpjournal D/Journal:=>DataSnapshot{key=-ksvzdirgwfgfg3dalxyt1,value={userID=qAzq0h3E8oaUn09SkG0hWhFfTDT2,journalName=Journal008,journalID=-KsvzdIrgwFG3DaLXyt1,companyName=com008,journalColor=blankForNow} 09-01 21:20:20.365 30374-30374/com.colla.sdpjournal D/Journal:=>DataSnapshot{key=-kswcfyiifhfhfhfhf--smTXxu,value={userID=qAzq0h3E8oaUn09SkG0hWhFfTDT2,journalName=Journals008,journalID=-kswcfyiifhfhfhff--smTXxu,companyName=com008,journalColor=blankForNow}}
09-01 21:20:20.365 30374-30374/com.colla.sdpjournal D/Journal:==>DataSnapshot{key=-KswV-o82jgtoarr6bk,value={userID=qAzq0h3E8oaUn09SkG0hWhFfTDT2,journalName=journal009,journalID=-KswV-o82jgtoarr6bk,companyName=com009,journalColor=blankForNow}可以在这里发布错误日志吗?请发布错误日志。提前谢谢!只需找出在哪里可以找到日志…java.lang.NullPointerException:尝试在com.colla.sdpjournal.MainActivity$1.onChildaded(MainActivity.java:75)上的空对象引用上调用虚拟方法'void java.util.ArrayList.clear()@Jamen检查我的答案编辑1致命异常:主进程:com.colla.sdpjournal,PID:5840 java.lang.NullPointerException:尝试调用虚拟方法'void java.util.ArrayList.clear()'在com.colla.sdpjournal.MainActivity$1.onDataChange(MainActivity.java:75)@Jamen上的空对象引用上,由于没有初始化journalArrayList.clear(),您将获得空指针错误@akhilesh0707我解决了这个问题,就像你说的,将addChildEvent更改为addValueEvent。。。谢谢