gpt4 book ai didi

java - Android Firebase 将数据检索回 gridView

转载 作者:行者123 更新时间:2023-12-02 12:18:15 25 4
gpt4 key购买 nike

我是编程新手,刚刚开始做我的第一个 Android 项目。我已经被这个问题困扰了几个小时,但仍然不知道为什么它不起作用。下面是数据结构。

enter image description here

我想为各自的用户添加日记,我实现的 addJournal() 函数正在运行。但是当我将这些日志从数据库检索到 gridView 时,它崩溃了。

以下是我将期刊添加到数据库的方法:

        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

有人可以帮我吗?提前致谢

最佳答案

使用addListenerForSingleValueEvent代替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 获取一组中的所有数据,而 ChildEventListener 则获取特定节点的一条一条记录的数据。我建议你尝试一下。为每个 ValueEventListenerChildEventListener 检查行为创建一个代码段

编辑 1

您收到 NullPointerException 只是因为您没有初始化 journalArrayList 列表

初始化您的列表

journalArrayList=new ArrayList<>()

编辑 2 您可以使用 map 尝试以下解决方案来获得值(value)

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);
}

关于java - Android Firebase 将数据检索回 gridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45997946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com