如何将加载的数据从Firestore保存到Arraylist



我正在使用Firestore来保存数据。我想加载数据并将其保存在数组中。

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_map );
searchText = (AutoCompleteTextView) findViewById( R.id.search );
gpsImage = (ImageView) findViewById( R.id.gps_btn );
info = (ImageView) findViewById( R.id.info_btn );
cafe = (ImageView) findViewById( R.id.cafe_btn );
cafelist_btn = (ImageView)findViewById( R.id.cafelist );

if(isServicesOK()){
getLocationPermission();
}
db.collection("coll")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
for (DocumentSnapshot querySnapshot: task.getResult()){
placeDetail = new PlaceDetail(querySnapshot.getString("name"),
querySnapshot.getString("address"),
querySnapshot.getString("rating"),
querySnapshot.getString("rates"));
namesList.add(placeDetail.getName());
}
}
});
System.out.println("Size: " + namesList.size());
}

在 for 循环中,我正在将加载的数据添加到 ArrayList,但我的打印显示该列表为空。有没有办法将数据保存到数组列表?

数据可能实际存储在 ArrayList 中。 您只需在数据库查询完成之前打印列表的内容。

get(( 是异步的,在查询完成之前立即返回。 查询发生在另一个线程中,然后无论执行什么操作都会调用您的回调。

如果在onComplete回调中移动 log 语句,您将看到它的内容。 但是现在,您只是在数据库查询完成之前打印数组。

您尝试打印的数据在查询从 Firestore 获取数据之前被打印出来。 在查询中移动要打印的代码,您将看到结果。

最新更新