Java 检索firebase数据库时,子节点值为null
我试图检索数据库值,但我使用uID获取的节点/子节点中的数据为空。 这是我的密码-Java 检索firebase数据库时,子节点值为null,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我试图检索数据库值,但我使用uID获取的节点/子节点中的数据为空。 这是我的密码- Intent intent = getIntent(); Bundle extras = intent.getExtras(); currentUser = extras.getString("currentUser"); selectedUser = extras.getString("selectedUser");
Intent intent = getIntent();
Bundle extras = intent.getExtras();
currentUser = extras.getString("currentUser");
selectedUser = extras.getString("selectedUser");
uID = extras.getString("uID");
mFirebaseDatabase = FirebaseDatabase.getInstance();
mDbReference = FirebaseDatabase.getInstance().getReference();
final DatabaseReference uidRef = mDbReference.child("users").child(uID);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
ChatMessageModel chatMessageModel = ds.getValue(ChatMessageModel.class);
Log.d(TAG, "onDataChange: " + uidRef);
Log.d("users:: ", chatMessageModel.getMsgContent());
messageList.add(chatMessageModel);
for (int i = 0; i < messageList.size(); i++) {
Log.d(TAG, "All received messages : " + messageList.get(i).getMsgContent());
}
}
chatAppMsgAdapter.notifyDataSetChanged();
//Do what you need to do with the list.
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
Intent-Intent=getIntent();
Bundle extras=intent.getExtras();
currentUser=extras.getString(“currentUser”);
selectedUser=extras.getString(“selectedUser”);
uID=extras.getString(“uID”);
mFirebaseDatabase=FirebaseDatabase.getInstance();
mDbReference=FirebaseDatabase.getInstance().getReference();
最终数据库引用uidRef=mDbReference.child(“用户”).child(uID);
ValueEventListener ValueEventListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot ds:DataSnapshot.getChildren()){
ChatMessageModel ChatMessageModel=ds.getValue(ChatMessageModel.class);
Log.d(标签“onDataChange:+uidRef”);
Log.d(“用户::”,chatMessageModel.getMsgContent());
messageList.add(chatMessageModel);
对于(int i=0;i
//这是我的数据库u0TddklO8BXKCRHp4UFXEvmPS1H3:null
//u0TddklO8BXKCRHp4UFXEvmPS1H3是uid。其中,uid是currentuser。假设
user1
是第一个用户对应的uid
,要获取ChatMessageModel
节点下的所有user1
对象,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<ChatMessageModel> messageList = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
ChatMessageModel chatMessageModel = ds.getValue(ChatMessageModel.class);
Log.d("users:: ", chatMessageModel.getMsgContent());
messageList.add(chatMessageModel);
}
//Do what you need to do with the list.
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference();
字符串uid=FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference uidRef=rootRef.child(“用户”).child(uid);
ValueEventListener ValueEventListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
ArrayList messageList=新建ArrayList();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
ChatMessageModel ChatMessageModel=ds.getValue(ChatMessageModel.class);
Log.d(“用户::”,chatMessageModel.getMsgContent());
messageList.add(chatMessageModel);
}
//对列表执行您需要执行的操作。
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
Log.d(标记,databaseError.getMessage());
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
{
"rules": {
".read": true,
".write": true
}
}
private FirebaseDatabase database;
private DatabaseReference databaseRef;
database = FirebaseDatabase.getInstance();
databaseRef = database.getReference("users");
databaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot:dataSnapshot.getChildren()){
Log.d("Output Key", snapshot.getKey());
Log.d("Output Value", snapshot.getValue().toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
嘿,我尝试了上述解决方案,但我面临同样的问题。错误为-java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“com.google.firebase.database.DatabaseReference com.google.firebase.database.DatabaseReference.child(java.lang.String)”。但是在我的例子中UID的值不是null.DatabaseReference uidRef=mdbreeference.child(“用户”).child(UID);这一行返回null。请用更新的代码编辑您的问题,以便更清楚地看到问题。您好,我编辑了代码,解决了null指针问题。但检索到的子项为空。事实上,您得到了另一个错误,这意味着初始错误消失了,这是个好消息:)但这听起来是一个新问题,基本上应该被视为另一个问题,我无法在评论中回答或仅使用上述数据。作为个人猜测,我认为您使用了错误的数据库引用,但为了遵守此社区的规则,请使用发布另一个新问题,以便我和其他用户可以帮助您。嘿,我尝试了上述解决方案,但我面临相同的问题。错误为-java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“com.google.firebase.database.DatabaseReference com.google.firebase.database.DatabaseReference.child(java.lang.String)”。但是UID的值在我的例子中不是空的。你能把你的完整代码放进去吗??我希望您将databaseRef声明为一个全局变量,并在onCreate方法中初始化它。这就是我试图从之前的活动中获取值的原因,之后我定义了databaseRef,并声明databaseRef是全局的。非常感谢你的帮助。