我试图通常子类化android.os.AsyncTask类。我基本上只想添加一个属性。问题是,我仍然希望能够将它用作匿名类。
import android.content.Context;
import android.os.AsyncTask;
public class KAsyncTask extends AsyncTask<Params, Progress, Result> {
public Context c;
}
我已经尝试过对它进行子类化,但我无法将它包裹在我的头脑中。我应该这样做。
此致 EZFrag
答案 0 :(得分:16)
你的意思是你仍然希望它成为像AsyncTask这样的抽象模板类?宣言将是:
public abstract class KAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
public Context c;
}
答案 1 :(得分:6)
感谢Reuben,它按预期工作100%。
以下是我现在所拥有的:
import android.content.Context;
import android.os.AsyncTask;
public abstract class KAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
public Context context;
public KAsyncTask<Params, Progress, Result> setContext(Context c){
this.context = c;
return this;
}
}
这就是我使用它的方式:
new KAsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
Toast.makeText(context, "Connecting to Server...", Toast.LENGTH_LONG).show();
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
//super.onPostExecute(result);
Toast.makeText(context, "Responce Recieved.", Toast.LENGTH_LONG).show();
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
//Do webservice calls in here
return null;
}
}.setContext(this).execute();
我需要上下文从任务本身向用户显示消息。
此致 EZFrag
答案 2 :(得分:2)
如果我正确理解您的问题,您正在寻找一种方法来实例化一个匿名内部AsyncTask
,它也有一个实例变量。您打算如何将该附加值传递给AsyncTask
?
AFAIK,Java不允许您覆盖匿名内部类的构造函数。因此,您唯一的希望是传递Context
作为Params
类型的一部分(恰好是Varargs)。这意味着您必须将Params
类型设为Context
;或使用String
和serialize
/ Parcel
Context
作为String
。老实说,我觉得这不值得付出努力,而且太过分了。
您是否有理由使用匿名 AsyncTask
?我建议你创建一个AsyncTask
的命名实现。