android - 在递增之前等待下载图像
问题描述
我有一个 for 循环,它将在服务器上下载图像,这就是它的外观
for (int i = 0; i < sync_data.length(); i++) {
String main_link = "LINK" + folder + "/" + file_name;
FilePathname = sdCardDirectory + "/" + file_name;
DownloadFilesname(FilePathname, main_link);
index++;
p = (float) index / (float) sync_data.length();
p = p * (float) 100;
runOnUiThread(new Runnable() {
@Override
public void run() {
publishProgress((int) p);
}
});
}
/* 函数图片下载 */
public void DownloadFilesname(String filanme, String Urlname) {
try {
URL u = new URL(Urlname);
InputStream is = u.openStream();
DataInputStream dis = new DataInputStream(is);
byte[] buffer = new byte[1024];
int length;
FileOutputStream fos = new FileOutputStream(new File(filanme));
while ((length = dis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
} catch (MalformedURLException mue) {
Log.e("SYNC getUpdate", "malformed url error", mue);
} catch (IOException ioe) {
Log.e("SYNC getUpdate", "io error", ioe);
} catch (SecurityException se) {
Log.e("SYNC getUpdate", "security error", se);
}
}
我的问题是publishProgress
即使图像尚未下载也已经更新。这将导致异步任务完成,但图像仍在下载..
如何使图像必须在增量之前下载?
解决方案
您只需在“doInBackground()”中调用“publishProgress()”,然后实现/覆盖
protected void onProgressUpdate(Integer... progress) {
...
}
当您调用“publishProgress()”时,会在 Ui/MainThread 中调用“onProgressUpdate()”事件(这意味着您可以使用其中的所有 UI 组件)
推荐阅读
- python - Python Recurisve Backtracking 创建迷宫
- vb.net - VB.net 两次读取文本文件(最佳实践 - 关闭然后重新打开?替代方案?)
- c# - 在 C# 中的 DateTimeOffset 列表中添加缺少的元素
- jquery - 在标签标签中单击带有 input[type=radio] 的问题
- powershell - ConverTo-Json 改变预期输出
- dialogflow-es - 将 JSON 数组传递给fulfillmentText
- react-admin - 自定义 React-Admin 组件
- r - R:我如何将solve_LSAP翻译成数据框?
- javascript - 如何在带有钩子的 ReactJS 中使用复选框作为单选按钮?
- javascript - Javascript、Razor/MVC 中的 C# if 语句