gpt4 book ai didi

java - 两次异步操作后更新 UI

转载 作者:行者123 更新时间:2023-12-02 11:20:50 26 4
gpt4 key购买 nike

我在 android 中使用 google Firebase 数据库。我需要从数据库中获取两组数据 - userInfo 和 assignmentInfo。然后我需要将它们组合起来并在回收器 View 中显示数据。解决这个问题的最佳方法是什么?由于数据的获取是异步的,这变得很困惑。

我能想到的一种方法是,如果其他异步函数已完成,则检查两个异步函数是否成功。如果是,则获取其数据,组合并初始化适配器。这是最好的方法吗?

最佳答案

当我在用户登录应用程序之前必须从数据库下载某些内容时,我已经解决了此类问题,这样我就解决了这个问题。

要使用ObservableInteger,你可以这样做

首先声明

private ObservableInteger mObsInt;

然后在你的 onCreate 中你将有一个监听器等待 mObsInt 的值改变,这些值改变后你可以做任何你想做的事情

//Listener
mObsInt = new ObservableInteger();
mObsInt.set(0);

mObsInt.setOnIntegerChangeListener(new OnIntegerChangeListener()
{
@Override
public void onIntegerChanged(int newValue)
{
if (mObsInt.get()==1)
//Do something if the first asyncTask finishes
if (mObsInt.get()==2){
//Do something if the second asyncTask finishes, in this case i just go to another activity when both asyncTasks finish
Intent mainIntent = new Intent().setClass(LoginActivity.this, Principal.class);
startActivity(mainIntent);
finish();
}
}
});

那么,它是如何工作的

ObservableInteger 将查找变量 mObsInt 中的更改,因此假设如果 mObsInt 等于 1,它将执行某些操作,如果等于 2 会做另一件事,因此,用 2 个 asynctasks 解决这个问题很容易,当其中一个 asynctasks 完成时 mObsInt 将等于 1 ,如果另一个 asyncTask 完成,那么 mObsInt 将是 mObsInt++ ,然后你的 mObsInt 将是等于 2,监听器将等待这些值,然后当这些值与 onCreate 方法中的 if 语句匹配时执行您想要执行的操作

现在,只需在您的 asynctasks 中将这一行放入您的 onPostExecute() 方法

mObsInt.set(mObsInt.get()+1);

因此,如果第一个异步完成, mObsint == 1 ,如果第二个异步完成 mObsInt == 2 ,然后您可以在 onCreate 方法中处理您想要执行的操作

希望这对你有帮助,它对我也有帮助

您可以在此文档中获取更多信息:https://developer.android.com/reference/android/databinding/ObservableInt.html

编码愉快!

关于java - 两次异步操作后更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49926339/

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