【问题标题】:Datasnapshot.getValue.tostring() is not populating my string variableDatasnapshot.getValue.tostring() 没有填充我的字符串变量
【发布时间】:2019-12-08 09:27:02
【问题描述】:

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

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) {

            }
        });


    }

数据快照应该填充字符串变量,因为其中有一个实际值。下面是我的 firebasedatabase 的 sn-p 方法

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

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

【问题讨论】:

  • 在 onDataChange 块中添加一个日志或 toast,看看它是否被调用过
  • onDataChange 尚未被调用时,您很可能正在尝试使用customerID。见stackoverflow.com/a/50435519
  • 如果您尝试在onDataChange() 中使用Log.d(TAG, customerID);,它会打印出来吗?请回复@AlexMamo
  • @FrankvanPuffelen 创建一个接口或创建一个异步类会做得更多吗?

标签: java android firebase firebase-realtime-database


【解决方案1】:

问题出在这里:

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

这是因为 addValueEventListener(...) 是异步的 (meaning)。一个快速解决您的问题的方法是在做任何其他事情之前先获得价值。要解决此问题,您可以使用AsyncTask

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

【讨论】:

  • 我创建了一个接口并将 getAssignedCustomer 设为回调方法。但是如果我使用回调,我无法弄清楚如何从服务器获取字符串并将其放入名为 cutomerId 的单独变量中。我需要将该字符串存储在一个变量中,这样我就可以将该字符串发送到另一个我以后需要的方法
  • 是的,我理解你,蒂莫西。您还可以在界面中添加一个方法,该方法只需设置从geetAssignedCustomer() 获取的值并将其设置为全局变量。如果您遇到任何困难,请告诉我。
  • 我认为不可能将一个已经归类为全局字符串的变量。我需要变量是一个字符串,以便从服务器保存值。
  • 为什么不呢?只需声明您的全局字符串并为其设置一个值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多