在下一个方法调用之前,Asynctask没有完成下载

时间:2018-05-21 10:00:17

标签: java android android-asynctask

我有一个扩展AsyncTask的简单类,我在网上访问文本文件并将内容提取到String tmpString。所有这些都在doInBackground()中完成。在调用execute();之后,我从另一个从parseContent();提取子字符串的类中调用方法我自己的方法tmpString

现在问题是,当我运行此代码时,我得到tmpString = null,这意味着网站上的内容为空,但我知道通过检查Log.d("--------INFO--------", inputLine);检索内容是否逐行打印源文件。我怀疑在下一个方法调用之前下载速度太慢了。调试时一切正常,因为下载有时间完成。

使用execute().get();有效,但我读到这不是一个最佳解决方案,特别是因为它阻止了线程。稍后,我想为下载添加进度条,但将其与get()结合使用显然不会......

我想做的是只有在下载完成后才调用下一个方法,我该如何实现?

代码在这里:

public class AccessFile extends AsyncTask<Object, Void, String>{
    private String urlContent = "";
    @Override
    protected String doInBackground(Object[] params) {
        URL url= null;
        url= new URL((String) params[0]);

        BufferedReader in = null;
        try {
            assert url!= null;
            in = new BufferedReader(
                    new InputStreamReader(
                            url.openStream()));
        } catch (IOException e) {
            e.printStackTrace();
        }

        String inputLine = null;
        inputLine = in.readLine();

        while (inputLine != null){
            Log.d("--------INFO--------", inputLine);
            urlContent += inputLine;
            inputLine = in.readLine();
        }
        in.close();
        return "";
    }
}

我称之为:

AccessFile af = new AccessFile();
af.execute("Link here").get();

1 个答案:

答案 0 :(得分:0)

你可以尝试

AccessFile af = new AccessFile()
{
     @Override
     protected void onPostExecute(String result) {
           super.onPostExecute(result);
           //code which should be executed after task completion
     }

}; 
af.execute("link);