Android存储的值在字符串中返回null

matque 发布于 2019-10-09 android 最后更新 2019-10-09 22:59 12 浏览

我试图从我的firebase数据库中以字符串“room_type_1”和“room_type_2”在我的代码中存储一些检索到的“receiver”和“sender”数据。数据正在被检索,但没有被传递给字符串。它一直返回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) {
}
        });
}
已邀请:

wnatus

赞同来自:

给出的代码仅创建具有回调的对象。只有在执行所有这些行之后才会调用回调方法,包括赋值。例如,此刻该行 room_type1 =发件人+“”+接收者; 执行时,senderreceiver都尚未设置为数据库中的值。 我建议您了解有关回调方法如何工作的更多信息。 要解决此问题,请在分配senderreceiver后将分配移动到回调方法中。 请注意,以数字结尾的变量名称表示您应该使用数组或List。