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.
Verlassen der Dokumentation Link hier für weitere Details: https://developer.android.com/reference/android/os/AsyncTask.html (Check AsyncTask generischen Typen Abschnitt) – Luis
Hallo, thx für deine Antwort, ich habe schon so versucht aber nicht funktionieren. – user8800556
Sie sollten versuchen, alle Ihre Funktion zu löschen, erweitert korrekt Ihre Klasse, dann implementiert die Methoden und es wird funktionieren –