简体   繁体   English

将对象从Fragment传递到onPostExecute的ASyncTask

[英]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的doInBackgroundonPostExecute

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM