在不调用 addValueEventListener 的情况下检索 firebase 数据库中的数据 [重复]
Posted
技术标签:
【中文标题】在不调用 addValueEventListener 的情况下检索 firebase 数据库中的数据 [重复]【英文标题】:Retrieving data in firebase database without calling addValueEventListener [duplicate] 【发布时间】: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,但我强烈建议不要这样做。你能做的最好的事情就是掌握异步编程。这需要时间,但会给你最好的结果,你的用户是最好的应用程序。如需更长的解释,请在此处查看我的答案:***.com/questions/50434836/… 【参考方案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
【讨论】:
以上是关于在不调用 addValueEventListener 的情况下检索 firebase 数据库中的数据 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
firebase on()/addValueEventListener 需要多少资源?
这将是 Swift 3 中 addValueEventListener 的等效命令
MPMoviePlayerPlaybackDidFinishNotification 在不应该被调用时被调用