Java AsyncTask的用法

时间:2017-03-11 23:07:45

标签: java android android-asynctask

在本课程中,我正在创建一个“新闻阅读器”应用程序。基本上,我需要从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

的类的情况下执行此操作

1 个答案:

答案 0 :(得分:1)

使用doInBackground()而不是onPostExecute方法解析数据。完成从JSON响应中解析和提取数据之后,调用下一个API并使用相同的doInBackground()方法解析其响应。

SIDENOTE

始终建议将上下文分开,不要混淆。模块化有助于在扩展代码时使用其他功能。创建class extends的专用AsyncTask没有任何害处。保持代码清洁,以便于以后阅读和理解。