如何在android中使用asynctask加载图像缩略图

如何在android中使用asynctask加载图像缩略图,android,image,android-asynctask,imageview,bitmapimage,Android,Image,Android Asynctask,Imageview,Bitmapimage,我正在尝试在android中从服务器到图像视图获取超过10个视频的缩略图。现在我可以成功地将视频的缩略图显示到图像视图中,但我的问题是显示所有缩略图花费了太多时间。因此,它将显示空白的黑屏,直到加载所有缩略图 所以我决定使用Asynctask显示进度条,直到加载的都是缩略图,但它根本不显示进度条。那么,你知道如何解决这个问题吗 代码 ImageView video_one, video_two, video_three, video_four, video_five; ImageView vid

我正在尝试在android中从服务器到图像视图获取超过10个视频的缩略图。现在我可以成功地将视频的缩略图显示到图像视图中,但我的问题是显示所有缩略图花费了太多时间。因此,它将显示空白的黑屏,直到加载所有缩略图

所以我决定使用Asynctask显示进度条,直到加载的都是缩略图,但它根本不显示进度条。那么,你知道如何解决这个问题吗

代码

ImageView video_one, video_two, video_three, video_four, video_five;
ImageView video_six, video_seven, video_eight, video_nine, video_ten;
ImageView video_ele, video_twe, video_thir, video_fort, video_fif;

    String path  = "http://serverlink/Fidol/upload/test.mp4";
    String path1 = "http://serverlink/Fidol/upload/ABCD.mp4";
    String path2 = "http://serverlink/Fidol/upload/bean.mp4";
    String path3 = "http://serverlink/Fidol/upload/masti.mp4";
    String path4 = "http://serverlink/Fidol/upload/ben.mp4";

        Bitmap bm = ThumbnailUtils.createVideoThumbnail(path,
            MediaStore.Images.Thumbnails.MICRO_KIND);
    Bitmap bm1 = ThumbnailUtils.createVideoThumbnail(path1,
            MediaStore.Images.Thumbnails.MICRO_KIND);
    Bitmap bm2 = ThumbnailUtils.createVideoThumbnail(path2,
            MediaStore.Images.Thumbnails.MICRO_KIND);
    Bitmap bm3 = ThumbnailUtils.createVideoThumbnail(path3,
            MediaStore.Images.Thumbnails.MICRO_KIND);
    Bitmap bm4 = ThumbnailUtils.createVideoThumbnail(path4,
            MediaStore.Images.Thumbnails.MICRO_KIND);
那么我已经打过电话了

new loadThumbnail().execute();
这是我的asynctask类

class loadThumbnail extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(ShowVideo.this);
            pDialog.setMessage("Loading Videos... Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        protected String doInBackground(String... args) {

            video_one.setImageBitmap(bm);
            video_two.setImageBitmap(bm1);
            video_three.setImageBitmap(bm2);
            video_four.setImageBitmap(bm3);
            video_five.setImageBitmap(bm4);

            video_six.setImageBitmap(bm);
            video_seven.setImageBitmap(bm1);
            video_eight.setImageBitmap(bm2);
            video_nine.setImageBitmap(bm3);
            video_ten.setImageBitmap(bm4);

            video_ele.setImageBitmap(bm);
            video_twe.setImageBitmap(bm1);
            video_thir.setImageBitmap(bm2);
            video_fort.setImageBitmap(bm3);
            video_fif.setImageBitmap(bm4);

            return null;
        }

        protected void onPostExecute(String file_url) {
            pDialog.dismiss();
        }
    }
类装入缩略图扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(ShowVideo.this);
setMessage(“正在加载视频…请稍候…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
受保护的字符串doInBackground(字符串…args){
视频。设置图像位图(bm);
视频。设置图像位图(bm1);
视频。设置图像位图(bm2);
视频四、设置图像位图(bm3);
视频。设置图像位图(bm4);
视频。设置图像位图(bm);
视频。设置图像位图(bm1);
视频8.setImageBitmap(bm2);
视频。设置图像位图(bm3);
视频。设置图像位图(bm4);
视频元素设置图像位图(bm);
设置图像位图(bm1)之间的视频;
视频图像位图(bm2);
视频设置图像位图(bm3);
视频文件设置图像位图(bm4);
返回null;
}
受保护的void onPostExecute(字符串文件\u url){
pDialog.disclose();
}
}
执行以下操作:

            video_one.setImageBitmap(bm);
            video_two.setImageBitmap(bm1);
            video_three.setImageBitmap(bm2);
            video_four.setImageBitmap(bm3);
            video_five.setImageBitmap(bm4);

            video_six.setImageBitmap(bm);
            video_seven.setImageBitmap(bm1);
            video_eight.setImageBitmap(bm2);
            video_nine.setImageBitmap(bm3);
            video_ten.setImageBitmap(bm4);

            video_ele.setImageBitmap(bm);
            video_twe.setImageBitmap(bm1);
            video_thir.setImageBitmap(bm2);
            video_fort.setImageBitmap(bm3);
            video_fif.setImageBitmap(bm4);
在onPostExecute中,因为您不能从doinbackground修改ui

并在doInbackground中执行此操作

        Bitmap bm = ThumbnailUtils.createVideoThumbnail(path,
        MediaStore.Images.Thumbnails.MICRO_KIND);
        Bitmap bm1 = ThumbnailUtils.createVideoThumbnail(path1,
        MediaStore.Images.Thumbnails.MICRO_KIND);
        Bitmap bm2 = ThumbnailUtils.createVideoThumbnail(path2,
        MediaStore.Images.Thumbnails.MICRO_KIND);
        Bitmap bm3 = ThumbnailUtils.createVideoThumbnail(path3,
        MediaStore.Images.Thumbnails.MICRO_KIND);
        Bitmap bm4 = ThumbnailUtils.createVideoThumbnail(path4,
        MediaStore.Images.Thumbnails.MICRO_KIND);

我想你应该把

Bitmap bm = ThumbnailUtils.createVideoThumbnail(path,
        MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm1 = ThumbnailUtils.createVideoThumbnail(path1,
        MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm2 = ThumbnailUtils.createVideoThumbnail(path2,
        MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm3 = ThumbnailUtils.createVideoThumbnail(path3,
        MediaStore.Images.Thumbnails.MICRO_KIND);
Bitmap bm4 = ThumbnailUtils.createVideoThumbnail(path4,
        MediaStore.Images.Thumbnails.MICRO_KIND);

doInBackground
方法下,因为据我所知,这就是任务发生的地方

在AsyncTask中有一个方法调用
onProgressUpdate(Integer…
,可用于进度更新。 试试这个

@Override
    protected void onPreExecute() {
        pDialog = new ProgressDialog(ShowVideo.this);
        pDialog.setMessage("Loading Videos... Please wait...");
        pDialog.show();
    }
如果您在某个地方编写了
loadThumbnail.get()
,也可以在代码中删除它,因为这会阻塞UI线程

这可能会有帮助:

class SetThumb extends AsyncTask<String, Void, Bitmap>{
private ImageView imageView;
SetThumb(ImageView imageView){
    this.imageView=imageView;
}

@Override
protected Bitmap doInBackground(String... strings) {
    return ThumbnailUtils.createVideoThumbnail(strings[0],MediaStore.Video.Thumbnails.MICRO_KIND);
}

@Override
protected void onPostExecute(Bitmap thumb){
    imageView.setImageBitmap(thumb);
}

使用UIL@Raghunandan的延迟加载,谢谢,但我没有列表视图以及任何自定义类。在这种情况下,我如何使用您的答案请帮助。我只是有几个图像视图,我想在其中显示视频缩略图,直到它加载它应该显示progressbar。就是这样。你不能从后台更新ui线程你正在doinbackground中设置位图,这是不可能的。我认为最好使用listview。在链接中,您可以从服务器获取图像。在这里,您可以从服务器获取图像mediastore@Raghunandan,我可以用gridview代替listview吗???是的,你可以使用gridview,它的工作原理与listview类似
new SetThumb(your_image_view).execute(path_of_file);