在我的主要Activity
中有两个不同的AsyncTask
在后台运行。
在AsyncTask之后启动新的Activity
。
这工作正常
主要活动 ---->>>> 新活动
问题:
但我的问题是没有完成两个AsyncTasks
,它转移到新的Activity
两个任务必须完成,然后才转到新Activity
。
帮我解决这个问题。
AsyncCallWSfor1 task1 = new AsyncCallWSfor1();
// Call execute
task1.execute();
AsyncCallWSfor2 task2 = new AsyncCallWSfor2();
// Call execute
task2.execute();
Toast.makeText(sign_in.this, "Login Successfull",Toast.LENGTH_LONG).show();
Intent intent = new Intent(MainActivivty.this,NewActvity.class);
startActivity(intent);
finish();
答案 0 :(得分:2)
它肯定会解决你的问题,做这样的事情
//create variable for your activity or fragment
Boolean isTask1Completed=false,isTask2Completed=false;
//on post execute of task 1
isTask1Completed = true;
if(isTask1Completed&&isTask2Completed){
//start activity here
}
//on post execute of task 2
isTask2Completed = true;
if(isTask1Completed&&isTask2Completed){
//start activity here
}
答案 1 :(得分:1)
为什么不能使用一个异步任务
尝试这两种方法
private class MyTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... url) {
String result="";
if(url.equals("m1"))
{
<!--Method one-->
result="first";
}else
{
<!--Method Two-->
result="second";
}
return result;
}
@Override
protected void onPostExecute(String result) {
if(result.equals("second")
{
<!--Start activity-->
}else
{
<!--Call Asynchronous task with second method-->
}
}
}
答案 2 :(得分:1)
使用一些简单的检查器
boolean first = false;
boolean second = false;
和
AsyncTask1
onPostExecute() {
first = true;
if (first && second) startActivity();
}
AsyncTask2
onPostExecute() {
second = true;
if (first && second) startActivity();
}
答案 3 :(得分:0)
取一个布尔变量
boolean firstCompleted=false;
在onPostExecute(-)
的{{1}}中,将其设为AsyncCallWSfor1
true
在firstCompleted=true;
onPostExecute(-)
开始新活动
AsyncCallWSfor2
希望这会对你有所帮助。
答案 4 :(得分:0)
您需要添加以下代码
Toast.makeText(sign_in.this,&#34; Login Successfull&#34;,Toast.LENGTH_LONG).show(); Intent intent = new Intent(MainActivivty.this,NewActvity.class); startActivity(意向); 光洁度()
在你的..
AsyncCallWSfor2 task2 = new AsyncCallWSfor2();
发布方法它运行正常....
答案 5 :(得分:0)
Asynctasks 串行执行。你应该把它放在第二个任务的postExecute上。
首次引入时,AsyncTasks在单个后台线程上串行执行。从DONUT开始,这被改为一个线程池,允许多个任务并行运行。从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。
如果您真的想要并行执行,可以使用THREAD_POOL_EXECUTOR调用executeOnExecutor(java.util.concurrent.Executor,Object [])。
答案 6 :(得分:0)
我建议使用Callbacks。 您启动(我认为)API客户端或其他东西并运行查询。 当它启动时,它将在一个新线程中运行请求,一旦它完成加载,它将回调到已启动请求的活动。
通过这种方式,您可以确定,任务将一个接一个地完成。
活动 - &gt;新的ApiClient() - &gt;执行(url,参数) - &gt; new Thread() - &gt;运行查询 - &gt;致电ApiClientCallback - &gt;活动收到回复 - &gt;做任何必要的事情
看看这里:http://www.techotopia.com/index.php/A_Basic_Overview_of_Android_Threads_and_Thread_handlers