gpt4 book ai didi

android - 如何从主 UI 线程检测到 Parse 的 query.findInBackground 已完成并返回数据?

转载 作者:行者123 更新时间:2023-11-30 01:39:28 26 4
gpt4 key购买 nike

在下面的函数中,我使用 findInBackground 从 Parse 获取数据。由于此函数在后台运行,我如何在数据准备好时通知主 UI 线程,以便我可以隐藏进度加载微调器并实际显示此数据?

使用 findInBackground 而不是 find() 的原因是因为我不希望主 UI 在从 Parse Server 获取数据时卡住。

public List<Student> getAllStudents() {
final List<Student> studentList = new ArrayList<Student>();
ParseQuery<ParseObject> query = ParseQuery.getQuery("Student");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> list, ParseException e) {
if (e == null) {
for (ParseObject o : list) {
Student s = new Student();
s.setObjectId(o.getObjectId());
s.setFirstName(o.getString("FirstName"));
s.setSurname(o.getString("Surname"));
s.setDOB(o.getString("DOB"));
s.setInstructor(o.getBoolean("Instructor"));
studentList.add(s);
}
// studentList is full here
} else {

}
// studentList is full here too
}

});
// studentList is empty here
return studentList;
}

最佳答案

我想你误会了。网络调用 findInBackground 是在后台完成的,是的。但是 done 是在主线程上调用的。因此,您对 ui 所做的任何更改都可以在那里毫无问题地完成。我一直在我的 done 回调中关闭微调器。

查看 Parse.com 源代码; findInBackground() 调用这一行:

 ParseTaskUtils.callbackOnMainThreadAsync(task, callback);

这告诉我回调在主线程上。可以肯定的是,我查看了 ParseTaskUtils。果然,在 ~107 行,它切换回主线程以通知结果。

关于android - 如何从主 UI 线程检测到 Parse 的 query.findInBackground 已完成并返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34689365/

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