当我在用户登录到应用程序之前必须从数据库下载某些东西时,我已经解决了这种问题,我解决了这个问题。
要使用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
编码愉快!