【问题标题】:Retrieving data in firebase database without calling addValueEventListener [duplicate]在不调用 addValueEventListener 的情况下检索 firebase 数据库中的数据 [重复]
【发布时间】:2020-07-09 01:39:28
【问题描述】:

我可以在不调用 addValueEventListener 的情况下从 firebase 数据库获取特定数据吗?在我的代码中,我使用 firebase 数据库成功获取了数据,但是当我使用包含 addValueListener 的函数并调用该函数时,我无法获取数据。这是我的代码:

 for(CheckOut g: GroceryActivity.list){

        String pid = g.getPid();
        Log.i("PID", pid);
        getOriginalQuantity(pid);
        Log.i("Original_Quantity", "" + originalQuantity);}

 public void getOriginalQuantity(String pid){

    originalQuantityReference = originalQuantityReference.child(pid);

    originalQuantityReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            Grocery grocery = dataSnapshot.getValue(Grocery.class);
            originalQuantity = grocery.getQuantity().toString();
            Log.i("Original Quantity", originalQuantity);
        }

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

        }
    });
}//end getOriginalQuantity method

我从 addValueListener 的日志中获取正确的数据,而在另一个日志中我得到 null valeu

【问题讨论】:

  • 正如其他人所说:Firebase API(与大多数现代云 API 一样)是异步的。同步使用它的唯一方法是调用其 HTTPS REST API,但我强烈建议不要这样做。你能做的最好的事情就是掌握异步编程。这需要时间,但会给你最好的结果,你的用户是最好的应用程序。如需更长的解释,请在此处查看我的答案:stackoverflow.com/questions/50434836/…

标签: java android firebase firebase-realtime-database


【解决方案1】:

Firebase api 是异步的,这意味着当您使用AddValueEventListener 从数据库中检索数据时,程序不会停止并继续执行。因此在这个log

Log.i("Original_Quantity", ""+originalQuantity);

您将得到 null,因为它是在完全检索数据之前执行的。有两种方法可以访问onDataChange 中的数据,或者您可以执行以下操作:

How to return DataSnapshot value as a result of a method?

【讨论】:

    【解决方案2】:

    不,要从 firebase 数据库获取特定数据,您必须使用 addValueEventListener 或 addListenerForSingleValueEvent

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      相关资源
      最近更新 更多