首页 > 解决方案 > 在递增之前等待下载图像

问题描述

我有一个 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即使图像尚未下载也已经更新。这将导致异步任务完成,但图像仍在下载..

如何使图像必须在增量之前下载?

标签: androidmultithreadingandroid-asynctask

解决方案


您只需在“doInBackground()”中调用“publishProgress()”,然后实现/覆盖

protected void onProgressUpdate(Integer... progress) {
    ...
}

当您调用“publishProgress()”时,会在 Ui/MainThread 中调用“onProgressUpdate()”事件(这意味着您可以使用其中的所有 UI 组件)


推荐阅读