在本课程中,我正在创建一个“新闻阅读器”应用程序。基本上,我需要从API(首次AsyncTask
调用)获取新闻的ID,然后使用这些ID,我获取每篇新闻文章的数据(第二次异步调用),并且在该数据中有一个导致该文章的网址。
当我获得URL时,我将其存储在数据库中,稍后再使用。
在课程中,它完成了
getNews news = new getNews();
String result = news.execute("https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty").get();
,onPostExecute()
未使用,我想使用它。
因此,这里是获取文章ID的类(First Async Call)
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();
}
}
}
在onPostExecute()
内部,当我遍历我获得的数据时,我必须对我在该数据中获得的每个ID进行异步调用。
有没有办法在不创建另一个使用AsyncTask
?
答案 0 :(得分:1)
使用doInBackground()
而不是onPostExecute
方法解析数据。完成从JSON响应中解析和提取数据之后,调用下一个API并使用相同的doInBackground()
方法解析其响应。
SIDENOTE
始终建议将上下文分开,不要混淆。模块化有助于在扩展代码时使用其他功能。创建class
extends
的专用AsyncTask
没有任何害处。保持代码清洁,以便于以后阅读和理解。