2017-10-19 6 views
-2

Ich bin neu in Java-Programmierung und habe eine Frage. Ich habe this gefunden und versucht, diese Methode zu verwenden, um meine Werte von der doInBackground-Methode an die onPostExecute-Methode zu übergeben. Aber Android Studio 2.3 erlaubt dies nicht.Asynctask: Werte von doInBackground an onPostExecute übergeben

Android Studio meine @Override bei OnPostExecute unterstreichen:

@Override 
    protected void onPostExecute(String s){ 
     //super.onPreExecute(); 

     // Create adapter for ListView (Universal Image Loader) 
     AngeboteListAdapter adapter = new AngeboteListAdapter(this, R.layout.angebote_list_view_adapter, dataList); 
     mListView.setAdapter(adapter); 

     Toast.makeText(AngeboteActivity.this,"onPostExecute",Toast.LENGTH_LONG).show(); 
    } 

und meine queryresult in doInBackground:

@Override 
    protected QueryResult doInBackground(String... params){ 
     try 
     { 

Hier ist der gesamte Code:

public class MultiplyTask extends AsyncTask<String,Void,ArrayList<Artikel>>{ 

    private class QueryResult { 
     ArrayList<Artikel> dataList; 

     public QueryResult(ArrayList<Artikel> dataList) { 
      this.dataList = dataList ; 
     } 
    } 

    @Override 
    protected void onPreExecute(){ 
     super.onPreExecute(); 
    } 
    @Override 
    protected void onPostExecute(String s){ 
     //super.onPreExecute(); 

     // Create Adapter for ListView (UniversalImageLoader) 
     AngeboteListAdapter adapter = new AngeboteListAdapter(this, R.layout.angebote_list_view_adapter, dataList); 
     mListView.setAdapter(adapter); 

     Toast.makeText(AngeboteActivity.this,"onPostExecute",Toast.LENGTH_LONG).show(); 
    } 


    String data =""; 

    @Override 
    protected QueryResult doInBackground(String... params){ 
     try 
     { 
     URL url = new URL("https://myjson.com"); 
     HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
     InputStream inputStream = httpURLConnection.getInputStream(); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
     String line = ""; 
     while(line != null){ 
       line = bufferedReader.readLine(); 
       data = data + line; 
     } 
     ArrayList<String> listdata = new ArrayList<>(); 
     JSONArray jArray = new JSONArray(data); 
     for(int i =0 ;i <jArray.length(); i++){ 
      listdata.add(jArray.getString(i)); 
     } 

      JSONArray json = new JSONArray(data); 
      String[][] matrix = new String[json.length()][5]; 


     //Fill Array with response 
     for (int i=0; i < json.length(); i++) { 
      JSONObject obj = json.getJSONObject(i); 
      matrix[i][0] = String.valueOf(obj.getInt("Artikelnummer")); 
      matrix[i][1] = String.valueOf(obj.getDouble("Preis")); 
      matrix[i][2] = obj.getString("Von"); 
      matrix[i][3] = obj.getString("Bis"); 
      matrix[i][4] = obj.getString("art_link"); 
     } 



      //new Arrays 
      String[] all_art_nr = new String[matrix.length]; 
      String[] all_preis = new String[matrix.length]; 
      String[] all_von = new String[matrix.length]; 
      String[] all_bis = new String[matrix.length]; 
      String[] all_link = new String[matrix.length]; 


      //Array sort 
      for (int i = 0; i < matrix.length; i++) { 
       all_art_nr[i] = matrix[i][0]; 
       all_preis[i] = matrix[i][1]; 
       all_von[i] = matrix[i][2]; 
       all_bis[i] = matrix[i][3]; 
       all_link[i] = matrix[i][4]; 
      } 



      //Fill Arraylist 
      ArrayList<Artikel> dataList = new ArrayList<>(); 
      for (int i = 0; i < matrix.length; i++) { 
       Artikel angebote = new Artikel(all_art_nr[i], all_preis[i], all_von[i], all_bis[i], all_link[i]); 
       dataList.add(angebote); 
      } 


      return new QueryResult(dataList); 


    } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    return null; 
    } 

} 

Android Studio wollen Ändern von QueryResult in Arraylist und der @Override überschreibt die Methode nicht von seiner Supercla ss, wenn ich QueryResult in doINBackground herausnehmen, kann er die Superklassenmethode überschreiben. Danke im Voraus.

Antwort

1

Wenn Sie erweitert die AsyncTask Überprüfung der Parameter: extends Asynctask<Params, Progress, Result>

Wenn Sie also ein String zu Ihrem doInBackround übergeben wollen, die eine queryresult zu Ihrem OnPostExecute zurück Sie sollten sich so erstrecken: extends Asynctask<String, Void, QueryResult>

+0

Verlassen der Dokumentation Link hier für weitere Details: https://developer.android.com/reference/android/os/AsyncTask.html (Check AsyncTask generischen Typen Abschnitt) – Luis

+0

Hallo, thx für deine Antwort, ich habe schon so versucht aber nicht funktionieren. – user8800556

+0

Sie sollten versuchen, alle Ihre Funktion zu löschen, erweitert korrekt Ihre Klasse, dann implementiert die Methoden und es wird funktionieren –

0

Warum funktioniert das nicht?

private class QueryResult { 
    ArrayList<Artikel> dataList; 

    public QueryResult(ArrayList<Artikel> dataList) { 
     this.dataList = dataList ; 
    } 
} 



public class loadAngebote extends AsyncTask<String, Void, ArrayList<Artikel>>{ 

    String data =""; 

    @Override 
    protected ArrayList<Artikel> doInBackground(String... params){ 

     try 
     { 
      URL url = new URL("https://api.myjson.com/bins/1dnrmf"); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
      String line = ""; 
      while(line != null){ 
       line = bufferedReader.readLine(); 
       data = data + line; 
      } 
      ArrayList<String> listdata = new ArrayList<>(); 
      JSONArray jArray = new JSONArray(data); 
      for(int i =0 ;i <jArray.length(); i++){ 
       listdata.add(jArray.getString(i)); 
      } 

      JSONArray json = new JSONArray(data); 
      String[][] matrix = new String[json.length()][5]; 

      //Array mit Response füllen 
      for (int i=0; i < json.length(); i++) { 
       JSONObject obj = json.getJSONObject(i); 
       matrix[i][0] = String.valueOf(obj.getInt("Artikelnummer")); 
       matrix[i][1] = String.valueOf(obj.getDouble("Preis")); 
       matrix[i][2] = obj.getString("Von"); 
       matrix[i][3] = obj.getString("Bis"); 
       matrix[i][4] = obj.getString("art_link"); 
      } 

      //Neue Arrays inizializieren 
      String[] all_art_nr = new String[matrix.length]; 
      String[] all_preis = new String[matrix.length]; 
      String[] all_von = new String[matrix.length]; 
      String[] all_bis = new String[matrix.length]; 
      String[] all_link = new String[matrix.length]; 


      //Array umsotieren und befüllen 
      for (int i = 0; i < matrix.length; i++) { 
       all_art_nr[i] = matrix[i][0]; 
       all_preis[i] = matrix[i][1]; 
       all_von[i] = matrix[i][2]; 
       all_bis[i] = matrix[i][3]; 
       all_link[i] = matrix[i][4]; 
      } 

      //String in Arraylist vom Typ Artikel einfügen 
      ArrayList<Artikel> dataList = new ArrayList<>(); 
      //ArrayList<Artikel> passed = passing[0]; //get passed arraylist 
      for (int i = 0; i < matrix.length; i++) { 
       Artikel angebote = new Artikel(all_art_nr[i], all_preis[i], all_von[i], all_bis[i], all_link[i]); 
       dataList.add(angebote); 
      } 

      return new QueryResult(dataList); 




     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 



     return null; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<Artikel> QueryResult){ 
     //super.onPreExecute(); 

     TextView txt = (TextView) findViewById(R.id.data); 
     txt.setText("Executed"); // txt.setText(result); 
     // Adapter erstellen und dem ListView übergeben 
     AngeboteListAdapter adapter = new AngeboteListAdapter(this, R.layout.angebote_list_view_adapter, dataList); 
     mListView.setAdapter(adapter); 
     Toast.makeText(AngeboteActivity.this,"onPostExecute Methode ausgeführt",Toast.LENGTH_LONG).show(); 


    } 

} 
Verwandte Themen