【发布时间】:2016-08-18 19:32:06
【问题描述】:
我从一个 URL 获取信息并将该信息发送到多个 URL。我在 AsyncTask 中的“for”上运行它,但事实是,如果其他操作没有返回错误或成功,它就不会继续。所以我想在 AsyncTask-ception 中执行此操作,但遗憾的是 Android 不允许我这样做。
所以,我有两个 AsyncTask 类。这就是我发送到网站的课程:
class SendTo extends AsyncTask <Object,Object,String>{
@Override
protected String doInBackground(Object... strings) {
....
}
}
这是我从网站上得到的任务:
class GetFrom extends AsyncTask <Object,Object,String>{
@Override
protected String doInBackground(Object... strings) {
....
String param = anotherMagicalFunctionThatGivesParamToSend(strings[1]);
for(i = 1; i < websites.length; i++){
new SendTo.execute(websites[i],param);
}
}
}
但遗憾的是,我在 AS 上遇到了这些错误:
方法execute必须从主线程调用,目前推断 线程是工作者
非静态方法 'execute(Params...)' 不能从 静态上下文
那么您有什么想法、解决方案或方法来实现这一目标吗?感谢您的帮助。
【问题讨论】:
-
SendTo.execute(params);。您不能以这种方式执行或启动 AsyncTask。它甚至可以编译!你应该首先创建一个你的类的实例,比如new SendTo().execute();。 -
从另一个 AsyncTask 的 doInBackground 启动 AsyncTasks 是没有意义的。无意义。你可以在 onPostExecute 中做。
-
@greenapps 有很多理由在另一个任务的后台启动一个任务。例如,您下载的资源需要您下载其他资源。您可以选择在其他 AsyncTask 中执行这些操作。问题是他试图调用一个类的实例方法。
-
@greenapps 请不要质疑我的语法,我已经写了一个示例代码,所以它可能是错误的,如果我收到错误但不是关于“你错过了'新'。”,这意味着我有一个成功的代码,对吧?另外,我想我不能同时运行多个 AsyncTask,对吗?
标签: java android multithreading android-asynctask