我正在尝试存储一些检索到的数据" receiver"和"发件人"来自我的firebase数据库中的字符串" room_type_1"和" room_type_2"在我的代码中。正在检索数据,但它没有被传递给字符串。它继续返回null。可能是什么问题?
databaseReference3.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
receiver = (String) dataSnapshot.child(user_id).child("username").getValue();
Log.v("postID2", receiver);
sender = (String) dataSnapshot.child(user_id).child("username1").getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
room_type_1 = sender + "_" + receiver;
room_type_2 = receiver + "_" + sender;
databaseReference6 = databaseReference5.child(room_type_1);
databaseReference7 = databaseReference5.child(room_type_2);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = messageArea.getText().toString();
if (!message.equals("")) {
databaseReference6.push().setValue(new Messages(message, sender));
databaseReference7.push().setValue(new Messages(message, sender));
}
}
});
databaseReference6.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
//Messages messages = dataSnapshot.getValue(Messages.class);
String message = (String) dataSnapshot.child("message").getValue();
String userName = (String) dataSnapshot.child("sender").getValue();
if(userName.equals(sender)){
addMessageBox("You:-\n" + message, 1);
}
else{
addMessageBox(receiver + ":-\n" + message, 2);
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
答案 0 :(得分:2)
仅为创建带有回调的对象的代码。只有在执行所有这些行之后才会调用回调方法,包括赋值。例如,此刻该行
room_type_1 =发件人+“_”+接收者;
执行,sender
和receiver
都尚未设置为数据库中的值。
我建议您详细了解回调方法的工作原理。
要解决此问题,请在分配sender
和receiver
后将分配移至回调方法。
请注意,以数字结尾的变量名称表示您应该使用数组或List。