如何在循环中从Firebase数据库获取数据?

时间:2018-02-13 19:52:51

标签: java android firebase firebase-realtime-database

在我的代码中我有一个产品条形码列表,在我的Firebase数据库中,我在这个条形码中有值,如下所示:BarCode structure

我正在尝试在循环中检索条形码数据,但我无法处理。这是我的代码:

#[inline]

此代码将条形码子项中的所有数据保存在for (int i = 0; i < listaBarCodeProdutos.size() ; i ++ ){ String barCode = (String) listaBarCodeProdutos.get(i); Query query = produtosRef.orderByKey().equalTo(barCode); query.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snapshot : dataSnapshot.getChildren()){ //Limpa o hash map listaMercadosCB.clear(); //Salva os mercados e os preços e um hashmap listaMercadosCB = (HashMap) snapshot.child("mercados").getValue(); //This is to parse the HashMap keys to Array Object[] listaIdsCB = listaMercadosCB.keySet().toArray(); //add esse obj em um array de objetos listaCB.add(listaIdsCB); Log.i("listaCB1", String.valueOf(listaCB)); } } @Override public void onCancelled(DatabaseError databaseError) { } }); } 中,但是当我尝试在循环后使用HashMap获取此HashMap值时,它将返回null ...

这是值的logcat:Log.i("listaMercadosCB", String.valueOf(listaMercadosCB));

  

这是在循环内部

02-13 19:44:17.146 13903-13903/com.example.mts_rodrigues.projetocartolada I/listaMercadosCB: {wrxYaHZuLBTfrPrrvThxQREFzK02=4.5, d63vvncs2gh6PSnxFAjxhTOayyq1=2.9}

  

这是在de loop

之后

我想在Firebase数据库在循环中检索到它之前调用循环外的值...

所有这些代码都在02-13 19:44:17.066 13903-13903/com.example.mts_rodrigues.projetocartolada I/listaMercadosCB: {}方法中。  有人可以帮帮我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

这不是您使用从Firebase Realtime数据库获取的数据的正确方法。你猜对了。 onDataChange()方法具有异步行为,这意味着在执行此方法之前,您的数据不可用。一个快速的解决方案是仅在onDataChange()方法中使用该数据,或者如果您想在外部使用它,请深入了解异步世界并使用我的答案的最后一部分post