我有三个班级,
在我的主要活动(A)中,我正在执行B类的登录方法。 在运行这些登录方法之后,我想打开第二个活动,即C类。我现在不能这样做,因为B类运行C类时会打开。我需要它等待Async任务完成。
有谁知道如何实现这一目标?我已经搜索过,从我收集到的东西中,人们一直试图用与我相同的类结构来做这件事,这会改变一些事情。
由于
答案 0 :(得分:2)
有谁知道如何实现这一目标?
从B的onPostExecute()
开始C.
因为B类没有扩展活动
您的AsyncTask
应由保留的片段管理,以便在配置更改中正常运行。使AsyncTask
成为该保留片段的常规内部类,以便它可以从getActivity()
安全地调用onPostExecute()
,并且可以在其上调用startActivity()
。
答案 1 :(得分:2)
如果您希望AsyncTask保留在单独的文件中,则需要在构造函数中获取Context。然后,在您完成登录后,您可以启动活动C.
这样的事情:
public class LoginTask extends AsyncTask<Void, Void, Void> {
Context mContext;
public LoginTask(Context ctx) {
mContext = ctx;
}
@Override
protected Void doInBackground(Void... voids) {
// Login here
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// Start Activity C
Intent intent = new Intent(mContext, ActivityC.class);
mContext.startActivity(intent);
}
}
在Activity A中调用此AsyncTask,如下所示:
new LoginTask(this).execute();
答案 2 :(得分:1)
使B成为A的内部类,然后从onPostExecute
开始C.由于B是A的内部类,因此您可以访问A中的所有内容。
答案 3 :(得分:0)
在扩展asynctask的类的postExecute中编写下一个活动的代码。
@Override
protected void onPostExecute()
{
//code for changing the current activtiy
}