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

时间:2017-04-23 03:03:56

标签: java android firebase-realtime-database

我正在尝试存储一些检索到的数据" 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) {

            }
        });

    }

1 个答案:

答案 0 :(得分:2)

仅为创建带有回调的对象的代码。只有在执行所有这些行之后才会调用回调方法,包括赋值。例如,此刻该行

room_type_1 =发件人+“_”+接收者;

执行,senderreceiver都尚未设置为数据库中的值。

我建议您详细了解回调方法的工作原理。

要解决此问题,请在分配senderreceiver后将分配移至回调方法。

请注意,以数字结尾的变量名称表示您应该使用数组或List。