在我的代码中我有一个产品条形码列表,在我的Firebase数据库中,我在这个条形码中有值,如下所示:。
我正在尝试在循环中检索条形码数据,但我无法处理。这是我的代码:
#[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: {}
方法中。
有人可以帮帮我吗?谢谢!
答案 0 :(得分:0)
这不是您使用从Firebase Realtime数据库获取的数据的正确方法。你猜对了。 onDataChange()
方法具有异步行为,这意味着在执行此方法之前,您的数据不可用。一个快速的解决方案是仅在onDataChange()
方法中使用该数据,或者如果您想在外部使用它,请深入了解异步世界并使用我的答案的最后一部分post。