我正在从网上下载文件,然后使用BufferedReader读取它。目前我使用DownloadManager下载文件,然后输入以下代码:
while (latestNumbersFile.exists() != true) {
System.out.println("WAITING...");
}
try {
Thread.sleep(5000);
} catch (InterruptedException ignored) {
}
因此,在文件下载完成之前,以下任何代码都不会执行。这有效,但接缝对我来说真的很脏。
如果我删除Thread.sleep(5000);
它的接缝文件确实存在但尚未准备好被读取。
必须有一种更好的方法来识别文件何时不仅存在,而且实际上已经完成并准备好在其上执行某些操作。
有什么想法? (对不起,如果这是一个noobie问题,我已经搜索了高低的答案)
答案 0 :(得分:4)
从下载完成时Android developers开始,DownloadManager广播一个意图。您可以捕获此“事件”并像处理它一样处理:
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
/** Do your coding here **/
}
}
};
registerReceiver(receiver, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
来自:Vogella
请告诉我这是否对您有所帮助,如果不能,我们可以尝试其他任何事情:)
答案 1 :(得分:0)
不建议忙碌等待。您最好使用DownloadManager。
来自Download a file with Android, and showing the progress in a ProgressDialog:
使用DownloadManager类(仅限GingerBread和更新版本) 这种方法非常棒,你不必担心手动下载文件,处理线程,流等.GingerBread带来了一个新功能:DownloadManager,它允许你轻松下载文件并将辛苦的工作委托给系统。