gpt4 book ai didi

java - 从 Firestore 查询数据到 Arraylist 但一无所获?

转载 作者:行者123 更新时间:2023-11-29 04:13:16 26 4
gpt4 key购买 nike

我在 ArrayList 中添加数据时遇到问题。我试图在数组列表中添加数据,但一无所获

这是我的代码

public class fmMain extends Fragment {
private ArrayList<markerList> posList = new ArrayList<markerList>();
public fmMain() {
// Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {


//Firebase get data
stores.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
for (QueryDocumentSnapshot documentSnapshot: queryDocumentSnapshots){
markerList m = new markerList(documentSnapshot.getId());
posList.add(m);
}
Log.d(TAG,posList.toString()); //got value
}
});
Log.d(TAG,posList.toString()); //got nothing
}

如您所见,当我尝试在 onSuccess 函数中添加值时,我得到了已添加的值,但是当我尝试添加外部函数时,我什么也没得到

这是我的数据库结构 enter image description here

最佳答案

您不能简单地在 onSuccess() 方法之外使用 posList 列表,因为由于此方法的异步行为,它总是 .这意味着当您尝试在该方法之外打印 posList.toString() 时,数据尚未从数据库加载完毕,这就是无法访问的原因。快速解决此问题的方法是仅在 onSuccess() 方法中使用列表,如以下代码行所示:

stores.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<GeoPoint> list = new ArrayList<>();
for (QueryDocumentSnapshot document : task.getResult()) {
list.add(document.getGeoPoint("position"));
}

//Do what you need to do with your list
}
}
});

如果您想在此方法之外使用该列表,我建议您从这个 post 中查看我的答案。 我已经在其中解释了如何使用自定义回调来解决此问题。你也可以看看这个 video 以便更好地理解。

关于java - 从 Firestore 查询数据到 Arraylist 但一无所获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53851955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com