我有一辆定制的可包装的物件车
我看过AsyncTask,但在这个主题上还不太清楚:
我想将一个字符串(即车辆的车辆ID )传递到一个AsyncTask中,然后在doInBackground()中我有一个方法
mRemoteInterface.getTrackHistory();这给了我一个ArrayList。然后,在onPostExecute()中启动一个车辆ID和ArrayList都是额外的活动。
这是我不能做的事情的概要。问题是,我不理解将对象传递到异步任务,然后从doInBackground()传递到onPostExecute(),从onPostExecute()传递回原始的执行调用。
GetTrackHistory.execute(,这里该怎么走?);
private class getTrackHistory extends
AsyncTask<String, Integer, Boolean **WHAT SHOULD GO HERE?**> {
@Override
protected Boolean doInBackground(
String... params) {
try {
String vehicleID = params[0];
listVehicleHistory = (ArrayList<Vehicle>) mRemoteInterface.getVehicleHistory(vehicleID);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onProgressUpdate(Integer... progress) {
}
@Override
protected void onPostExecute(Boolean worked) {
super.onPostExecute(worked);
Intent intent = new Intent(MainActivity.this,VehicleInfo.class);
intent.putExtra("Vehicle ID", toReturn);
intent.putParcelableArrayListExtra("VehicleHistory", listVehicleHistory);
startActivity(intent);
}}
发布于 2013-08-12 16:01:24
可以将字符串传递给异步任务的构造函数或doInbackground。
new getTrackHistory(mystringvalue).execute();然后在构造函数中
private class getTrackHistory extends AsyncTask<String, Integer, Boolean> {
String value;
public getTrackHistory(String mystring) {
value = mystring;
}编辑:
您还可以将值传递给doInbackground()
new TheTask().execute("mystring");
class TheTask extends AsyncTask <String,Void,Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
@Override
protected Void doInBackground(String... params) {
String value = params[0];
return null;
}
}对评论中的问题
new getTrackHistory(mystringvalue,ActivityName.this).execute();在建筑中
String value;
TheInterface listener;
public getTrackHistory(String mystring,Context context) {
value= mystring;
listener = (TheInterface) context;
}接口
public interface TheInterface {
public void theMethod(ArrayList<String> result); // your result type
}然后
在doInbackground中返回结果。我假设它的ArrayList类型为String。将数组列表更改为适合您的需求。
在你的onPostExecute里
if (listener != null) {
listener.theMethod(result); // result is the ArrayList<String>
// result returned in doInbackground
// result of doInbackground computation is a parameter to onPostExecute
}在活动类中实现接口。
public class ActivityName implements getTrackHistory.TheInterface然后
@Override
public void theMethod(ArrayList<String> result) { // change the type of result according yo your requirement
// use the arraylist here
}类似的post使用接口
发布于 2013-08-12 16:02:26
常见的方法是将参数/对象传递给AsyncTask的构造函数,存储为成员,然后从doInBackground()引用。例如:
private class getTrackHistory extends AsyncTask<String, Integer, Boolean> {
Vehicle mVehicle;
public getTrackHistory( Vehicle v) {
mVehicle = v;
}
@Override
protected Boolean doInBackground() {
// use mVehicle member here
}
}发布于 2013-08-12 16:01:56
Asynctask与任何其他类一样,只是一个类,使用构造函数,或者通过setter、公共成员等填充实例化对象。
https://stackoverflow.com/questions/18191479
复制相似问题