[英]Pass an object from Fragment to ASyncTask onPostExecute
I am trying to use a simple object class that gets passed around in my application. 我正在尝试使用在我的应用程序中传递的简单对象类。 First, I use it to execute an AsyncTask. 首先,我使用它来执行AsyncTask。 In the onPostExecute
method of the AsyncTask, I would like to get this same object class to use some of its setters again. 在AsyncTask的onPostExecute
方法中,我希望获得相同的对象类以再次使用其某些设置方法。 How can I pass this data
object to both the AsyncTask's doInBackground
and the onPostExecute
? 如何将该data
对象传递给AsyncTask的doInBackground
和onPostExecute
?
Code: 码:
TravelPlanner.java TravelPlanner.java
// Put departure & arrival into model class
data = new ReisData();
data.setDeparture(departureStation);
data.setArrival(arrivalStation);
// Start AsyncTask
GetInfo asyncTask = new GetInfo(this);
asyncTask.execute(data);
GetInfo.java GetInfo.java
public class GetInfo extends AsyncTask<ReisData, Integer, String> {
Reisplanner reisPlanner;
View view;
public GetInfo(Reisplanner main) {
this.reisPlanner = main;
view = reisPlanner.getView();
}
@Override
protected void onPreExecute() {
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
progressBar.setVisibility(View.VISIBLE);
super.onPreExecute();
}
@Override
protected String doInBackground(ReisData... params) {
try {
// Return XML as string with route options
return HttpRequestHelper.downloadFromServer(params);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
DocumentBuilder builder;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = null;
try {
builder = factory.newDocumentBuilder();
doc = builder.parse(new InputSource(new StringReader(result)));
} catch (Exception e) {
e.printStackTrace();
}
// TODO: Get 'ReisData' object
if (doc != null) {
XMLParser.parse(doc);
}
// Start Reisadvies with ReisData class
Fragment fragment = new Reisadvies();
// TODO: Put ReisData class into Bundle
this.reisPlanner.startFragment(fragment);
}
You can pass in Contructor of AsyncTask
你可以通过在构造器 AsyncTask
TravelPlanner.java TravelPlanner.java
// Put departure & arrival into model class
data = new ReisData();
data.setDeparture(departureStation);
data.setArrival(arrivalStation);
// Start AsyncTask
GetInfo asyncTask = new GetInfo(this,data); // here is
asyncTask.execute(data);
GetInfo.java GetInfo.java
public class GetInfo extends AsyncTask<ReisData, Integer, String> {
ReisData data;
Reisplanner reisPlanner;
View view;
public GetInfo(Reisplanner main,ReisData data) {
this.data=data;// you can use this
this.reisPlanner = main;
view = reisPlanner.getView();
}
@Override
protected void onPreExecute() {
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
progressBar.setVisibility(View.VISIBLE);
super.onPreExecute();
}
@Override
protected String doInBackground(ReisData... params) {
try {
// Return XML as string with route options
return HttpRequestHelper.downloadFromServer(params);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
DocumentBuilder builder;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = null;
try {
builder = factory.newDocumentBuilder();
doc = builder.parse(new InputSource(new StringReader(result)));
} catch (Exception e) {
e.printStackTrace();
}
// TODO: Get 'ReisData' object
if (doc != null) {
XMLParser.parse(doc);
}
// Start Reisadvies with ReisData class
Fragment fragment = new Reisadvies();
// TODO: Put ReisData class into Bundle
this.reisPlanner.startFragment(fragment);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.