Android 从另一个类调用AsyncTask
在现有应用程序中,我有一个活动,其内部类扩展了AsyncTask,如下所示:Android 从另一个类调用AsyncTask,android,android-asynctask,Android,Android Asynctask,在现有应用程序中,我有一个活动,其内部类扩展了AsyncTask,如下所示: public class Activity_1 extends BaseActivity { .... new async().execute(); ... public class asyncextends AsyncTask<Void, Void, String> { protected String doInBackground(Void... pro
public class Activity_1 extends BaseActivity {
....
new async().execute();
...
public class asyncextends AsyncTask<Void, Void, String> {
protected String doInBackground(Void... progress) { ... }
protected void onPreExecute() { ... }
protected void onPostExecute(String result) { ... }
}
}
public class Activity_1 extends BaseActivity {
...
MyAsyncTask aTask = new MyAsyncTask();
aTask.setListener(new MyAsyncTask.MyAsyncTaskListener() {
@Override
void onPreExecuteConcluded() {
// gui stuff
}
@Override
void onPostExecuteConcluded(String result) {
// gui stuff
}
});
aTask.execute();
...
}
公共类活动\u 1扩展了基本活动{
....
新建异步().execute();
...
公共类异步任务{
受保护的字符串doInBackground(Void…progress){…}
受保护的void onPreExecute(){…}
受保护的void onPostExecute(字符串结果){…}
}
}
现在,我需要从另一个活动调用同一个doInBackground方法,但这个内部类的onPostExecute()
操作一些本地UI变量,所以不可能从clas外部使用它。
是否有任何方法可以调用此AsyncTask,只需重写
onPostExecute
和onPreExecute
-方法,或者在其他活动中创建另一个内部类,执行相同的后台操作(当然,将其移动到公共实用程序类或其他对象),等等?您可以创建一个单独的抽象包私有类,扩展AsyncTask
并实现doInBackground()
方法:
abstract class MyAsyncTask extends AsyncTask<Void, Void, String> {
@Override
final protected String doInBackground(Void... progress) {
// do stuff, common to both activities in here
}
}
如果onPreExecute
和onPostExecute
也包含一些常见操作,则可以应用以下模式:
abstract class MyAsyncTask extends AsyncTask<Void, Void, String> {
public interface MyAsyncTaskListener {
void onPreExecuteConcluded();
void onPostExecuteConcluded(String result);
}
private MyAsyncTaskListener mListener;
final public void setListener(MyAsyncTaskListener listener) {
mListener = listener;
}
@Override
final protected String doInBackground(Void... progress) {
// do stuff, common to both activities in here
}
@Override
final protected void onPreExecute() {
// common stuff
...
if (mListener != null)
mListener.onPreExecuteConcluded();
}
@Override
final protected void onPostExecute(String result) {
// common stuff
...
if (mListener != null)
mListener.onPostExecuteConcluded(result);
}
}
您还可以让您的活动
实现MyAsyncTaskListener
:
public class Activity_1 extends BaseActivity implements MyAsyncTask.MyAsyncTaskListener {
@Override
void onPreExecuteConcluded() {
// gui stuff
}
@Override
void onPostExecuteConcluded(String result) {
// gui stuff
}
...
MyAsyncTask aTask = new MyAsyncTask();
aTask.setListener(this);
aTask.execute();
...
}
我从头开始写代码,所以可能有错误,但它应该说明这一点。如果我们在一个类中创建一个静态方法,并且将在AsyncTask的doInBackground中的任何类中执行,那么我们可以通过同一个类,甚至在不同的类中轻松地更新UI。只需构建一个主类的对象,然后像这样调用内部类就可以了
OuterMainClass outer = new OuterMainClass();
outer.new InnerAsyncClass(param)
.execute();
这个答案对你来说太晚了,但希望它能帮助别人
谢谢。在ClassOne中创建AsynckTask的构造函数 2.按新关键字装箱对象或类1 3.按对象调用异步任务
ClassOne{
class AsyncParmas extends AsyncTask {
public ADDloadGeofenceDetails() {
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Object doInBackground(Object... params) {
}
}
Class ClassTwo{
ClassOne obj= new ClassOne ();
obj.new AsyncParmas ().execute();
}
}
祝那些面临问题的人好运。正是我想要的。明天早上第一件事就是实施它。工作得很有魅力。谢谢回答得好!但是我不明白为什么我要为
MyAsyncTask aTask=newmyasynctask()获得以下内容代码>无法实例化MySyncTask类型,如有任何帮助,将不胜感激@Smittey必须是复制粘贴错误-MyAsyncTask的第二个实现不应该是非常好的示例,尤其是侦听器实现。在我当前的项目中工作得非常好!:)很高兴它帮助了某人:)嘿,你能帮我一个忙吗。。它工作得非常好,但现在我必须将值返回给调用方类,我应该如何做。。?我从另一个类调用了Asynctask类。所以我想得到调用方类中asyncTask的结果。你知道怎么做吗。?谢谢:)从AsyncTask的onPostExecute()方法调用调用调用方类的方法是的。这将起作用,但如果我想为多个类实现这一点。使一个静态对象从不同的类和onPostExc传递不同的值。。方法检查onPostEx中该变量的值。。方法,从那里你可以知道哪个类简单地从“if”语句调用了相应的方法。用具体的例子给出答案,只是一个供参考的答案是没有帮助的
ClassOne{
class AsyncParmas extends AsyncTask {
public ADDloadGeofenceDetails() {
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Object doInBackground(Object... params) {
}
}
Class ClassTwo{
ClassOne obj= new ClassOne ();
obj.new AsyncParmas ().execute();
}
}