Datasnapshot.getValue.tostring()未填充我的字符串变量

时间:2019-07-30 22:42:58

标签: java android firebase firebase-realtime-database

我有一个名为customerId的字符串变量,该变量初始化为空,直到我的getCustomerID方法填充它为止。但是由于某种原因,datasnapshot没有填充它。下面是字符串的初始化方式

private String customerID = " ";

这是下面的方法

public void getAssignedCustomer() {
        String driverId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        DatabaseReference assignedCustomerRef =FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child(driverId).child("customerRideId");
        assignedCustomerRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){
                        customerID= dataSnapshot.getValue().toString();
                        getAssignedCustomerLocation();

                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


    }

datasnapshot应该填充字符串变量,因为其中有一个中间值。以下是我的基于Firebase的数据库的摘要

"sfdqfkoxYjXB2YRDTfIaezWgkBd2":{  
            "customerRideId":"pUa4kMRMFIMEqZFYQ31w9eOpVhB3"
         },

正如您所见,customerRideId实际上具有一个值

1 个答案:

答案 0 :(得分:0)

这是问题所在:

您的getAssignedCustomer()方法不能立即填充您的customerId变量。

这是因为addValueEventListener(...)是异步(meaning)。解决您的问题的一种快速解决方案是,在进行其他操作之前先获取价值。要解决此问题,您可以使用AsyncTask

我希望这会有所帮助。.编码愉快!