Java 来自服务器的视频缩略图未显示在ImageView中

Java 来自服务器的视频缩略图未显示在ImageView中,java,android,Java,Android,需要从存储在服务器上的视频生成缩略图,下面是我的代码,但“路径”变量给出了问题,如何解决它。如果我删除路径参数和url参数,那么我会得到缩略图,但顺序不正确,或者有时会为2或3个视频生成相同的缩略图,下面是我的代码- Video video = mVideos.get(position); //play video using android api, when video view is clicked. url = video.getVideo

需要从存储在服务器上的视频生成缩略图,下面是我的代码,但“路径”变量给出了问题,如何解决它。如果我删除路径参数和url参数,那么我会得到缩略图,但顺序不正确,或者有时会为2或3个视频生成相同的缩略图,下面是我的代码-

Video video = mVideos.get(position);
            //play video using android api, when video view is clicked.
            url = video.getVideoUrl(); // your URL here
            Uri videoUri = Uri.parse(url);

            new DownloadImage(holder.videothumbView).execute(url);




public class DownloadImage extends AsyncTask<String, Void, Bitmap> {
        ImageView bmImage;

        public DownloadImage(ImageView bmImage) {
            this.bmImage = (ImageView ) bmImage;
        }

        protected Bitmap doInBackground(String... urls) {
            Bitmap myBitmap = null;
            MediaMetadataRetriever mMRetriever = null;
            try {
                mMRetriever = new MediaMetadataRetriever();
                if (Build.VERSION.SDK_INT >= 14)
                    mMRetriever.setDataSource(path, new HashMap<String, String>());
                else
                    mMRetriever.setDataSource(path);
                myBitmap = mMRetriever.getFrameAtTime();
            } catch (Exception e) {
                e.printStackTrace();


            } finally {
                if (mMRetriever != null) {
                    mMRetriever.release();
                }
            }
            return myBitmap;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }
Video=mVideos.get(位置);
//单击视频视图时,使用android api播放视频。
url=video.getVideoUrl();//你的网址在这里
urivideouri=Uri.parse(url);
新下载图像(holder.videothumbView).execute(url);
公共类DownloadImage扩展异步任务{
图像视图bmImage;
公共下载图像(ImageView bmImage){
this.bmImage=(ImageView)bmImage;
}
受保护位图doInBackground(字符串…URL){
位图myBitmap=null;
MediaMetadataRetriever mMRetriever=null;
试一试{
mMRetriever=新的MediaMetadataRetriever();
如果(Build.VERSION.SDK_INT>=14)
setDataSource(路径,newHashMap());
其他的
mMRetriever.setDataSource(路径);
myBitmap=mMRetriever.getFrameAtTime();
}捕获(例外e){
e、 printStackTrace();
}最后{
如果(mMRetriever!=null){
mMRetriever.release();
}
}
返回我的位图;
}
受保护的void onPostExecute(位图结果){
bmImage.setImageBitmap(结果);
}
}

所有与网络相关的任务必须在单独的线程中完成。你不能在主线程中完成它。您可以使用图像库。它是开源的,您可以为不同的状态显示不同的图像,如加载、错误等

Picasso.with(context) // your activity of other context referance
.load(video.getVideoUrl())
.placeholder(R.drawable.user_placeholder)  // this will show during image loading from network
.error(R.drawable.user_placeholder_error)  // error image to display
.into(holder.videothumbView);
BitmapDrawable的可能重复项未被弃用,请像这样使用它
BitmapDrawable BitmapDrawable=BitmapDrawable(context.getResources(),thumb)ThumbnailUtils.createVideoThumbnail()仅适用于本地路径。使用上面由Nilu发布的链接。