2

我正在开发测验应用程序。所有问题都在服务器端。当用户选择测验服务器的类别时,返回包含问题、答案变体和图像 url 的 json 文件。例如,在一个类别中,我有 10 个问题,其中 4 个问题需要加载图像。我从 json 文件中检查其中哪些有图像 url,我需要将它们下载到缓存或磁盘内存(不知道哪种解决方案更好)
问题:如何从服务器加载一堆图像并显示进度条?以及当用户想参加测验时如何访问下载的图像?我需要在开始回答问题之前下载图像,因为回答问题会有时间限制。

4

2 回答 2

0

尝试使用从网络下载图像和延迟加载

于 2015-10-22T05:02:19.330 回答
0

我认为您使用https://github.com/nostra13/Android-Universal-Image-Loader。该库使用磁盘缓存来存储图像,因此如果图像在磁盘上可用,则无需下载图像。

要创建带有更新的进度条,您必须创建一个 AsyncTask:http: //developer.android.com/reference/android/os/AsyncTask.html

文章的第一个例子是一个文件的下载。对于您的项目,请在下载的每个图像处调用 publishProgress()。

编辑:

private class DownloadImageTask extends AsyncTask<List<URL>, Integer, List<Bitmap>> {
    ImageLoader imageLoader = ImageLoader.getInstance(); // Instance android-universal-image-loader
    List<Bitmap> downloadedImage = new LinkedList<>();

    protected List<Bitmap> doInBackground(List<URL>... urls) {
        List<URL> yoururls = urls[0];
        for(URL url : yoururls){
            imageLoader.loadImage(url.toString(), new SimpleImageLoadingListener() {
                @Override
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                    downloadedImage.add(loadedImage);
                    publishProgress(1);
                }
            });
        }
        return downloadedImage;
    }

    protected void onProgressUpdate(Integer... progress) {
        //Update here your progress bar
    }

    protected void onPostExecute(List<Bitmap> result) {
        //Close your progress bar
        //Put your bitmap in your imageview
    }

    protected void onPreExecute(){
        //Create your progress bar
    }
}

执行:

List<Bitmap> yourimages = new DownloadImageTask().execute(YOURLISTURL).get();
于 2015-10-22T05:09:40.357 回答