In diesem Kurs erstelle ich eine Anwendung "News Reader". Grundsätzlich brauche ich IDs der Nachrichten von einer API (First AsyncTask
Anruf), dann benutze ich diese IDs, ich bekomme die Daten für jeden Nachrichtenartikel (Second Async-Aufruf), und in diesen Daten gibt es eine URL, die zu führt dieser Artikel. Wenn ich die URL bekomme, speichere ich sie in einer DB und es wird später verwendet. Im Verlauf wurde es mitVerwendung von Java AsyncTask
getNews news = new getNews();
String result = news.execute("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty").get();
wurde die onPostExecute()
nicht verwendet wird, und ich will, es zu benutzen.
So, hier ist die Klasse, die die IDs des Artikels (Erster Async Anrufs)
public class getNews extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
URL url;
String result = "";
HttpURLConnection connection = null;
try {
url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
InputStream in = connection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while(data != -1){
char current = (char) data;
result += current;
data = reader.read();
}
}
catch (Exception e){
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String s) {
try {
JSONArray jsonArray = new JSONArray(s);
//System.out.println("asasd" + jsonArray);
for(int i = 0; i< 20; i++){
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
Innerhalb der onPostExecute()
, wenn Schleife durch die Daten bekommt ich habe, habe ich einen Async Anruf zu jedem machen ID Ich bekomme diese Daten.
Also gibt es eine Möglichkeit, es zu tun, ohne eine andere Klasse zu erstellen, die AsyncTask
verwendet?
Warum machst du nicht einfach alles in 'AsyncTask's' doInBackground() '? Nichts sagt, dass Sie den JSON in 'onPostExecute()' analysieren müssen. –
Nun, das war einfach. Danke, manchmal sind die Lösungen so einfach, dass ich sie beaufsichtige. –
Klingt wie ein ausgezeichneter Anwendungsfall für RxJava –