2017-03-25 3 views
0

Ich versuche, eine einfache Objektklasse zu verwenden, die in meiner Anwendung weitergegeben wird. Zuerst verwende ich es, um eine AsyncTask auszuführen. In der onPostExecute Methode der AsyncTask möchte ich die gleiche Objektklasse erhalten, um einige seiner Setter wieder zu verwenden. Wie kann ich dieses Objekt data sowohl an die AsyncTask doInBackground als auch an die onPostExecute übergeben?Übergeben Sie ein Objekt von Fragment an ASyncTask onPostExecute

Code:

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

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); 

} 
+0

kann es nicht bekommen. kannst du genauer sein! –

+0

In der 'onPostExecute' möchte ich die gleiche' data' Instanz erhalten, die ich verwendet habe, um die AsyncTask in TravelPlanner.java auszuführen. – Blank

+0

übergeben Sie das Objekt durch einen Konstruktor –

Antwort

0

Sie in contructor von AsyncTask

passieren kann 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

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); 

} 
+0

Dachte überhaupt nicht, danke! – Blank

Verwandte Themen