我有一个扩展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();
答案 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);