我想为一些aSyncTasks创建一个基类。我创建了一个抽象类
public abstract class AsyncTaskBase<Params, Progress, Result> extends
AsyncTask<Params, Progress, Result> {}
从它继承的两个AsyncTask类aSyncTaskA:
public class AsyncTaskA extends AsyncTaskBase<String, String, String> {
@Override
protected String doInBackground(String... params)
{
return "A";
}
}
从它继承的两个AsyncTask类aSyncTaskB:
public class AsyncTaskB extends AsyncTaskBase<String, String, String> {
@Override
protected String doInBackground(String... params)
{
return "B";
}
}
在调用方法中,我调用:
AsyncTaskBase asyncTask;
// Call aSyncA
asyncTask = new AsyncTaskA();
asyncTask.execute();
// Call aSyncB
asyncTask = new AsyncTaskB();
asyncTask.execute();
但是我收到以下错误消息
05-02 17:00:18.674: E/AndroidRuntime(20120): Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
任何想法出了什么问题
答案 0 :(得分:4)
发生错误是因为您在致电AsyncTask
时未向#execute()
传递任何参数。您声明AsyncTask
采用String类型的参数,但您根本不传递任何内容。
您需要像这样致电#execute
:
asyncTask.execute( (String) null );
或者这个:
asyncTask.execute( (String[]) null );
如果您想在没有任何参数的情况下调用#execute
,请将Params的泛型类型更改为Void。
此外,声明您在此处演示的确切基本异步是没有意义的。我假设你会在某些时候添加一些内容,但我认为通过一个基本异步至少为你处理泛型类型参数会更好,即 -
public abstract class BaseHttpAsync extends AsyncTask<Uri, Void, HttpResult>
声明public abstract class AsyncTaskBase<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {}
有效地使您无益处。