Android 如何获取Arraylist<;位图>;在Glide的帮助下作为输出?

Android 如何获取Arraylist<;位图>;在Glide的帮助下作为输出?,android,thumbnails,android-bitmap,android-glide,Android,Thumbnails,Android Bitmap,Android Glide,此图显示了混洗和复制的当前输出 我有一个arraylist mp3文件路径,我想从中提取缩略图。使用位图的第一个代码可以正常工作,但提取速度太慢 filterpath==MP3文件的路径 MEDIACOVER==用于存储位图图像的Arraylist Glide version==com.github.bumptech.Glide:Glide:4.8.0,我认为这是Glide的最新版本 public class Main2Activity extends AppCompatActivity { p

此图显示了混洗和复制的当前输出

我有一个arraylist mp3文件路径,我想从中提取缩略图。使用位图的第一个代码可以正常工作,但提取速度太慢

filterpath==MP3文件的路径

MEDIACOVER==用于存储位图图像的Arraylist

Glide version==com.github.bumptech.Glide:Glide:4.8.0,我认为这是Glide的最新版本

public class Main2Activity extends AppCompatActivity {
private ArrayAdapter<Bitmap> adp;
ListView lv;
ArrayList<String> path;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    path=new ArrayList<>();
    lv=findViewById(R.id.chckimage);
    Intent in=getIntent();
    path=in.getStringArrayListExtra("path");
    adp = new ArrayAdapter(Main2Activity.this, 
    android.R.layout.simple_list_item_1);
    lv.setAdapter(adp);
    loadArrayList(path);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int 
         position, long id) {
            ImageView iv=findViewById(R.id.getting);
            iv.setImageBitmap(adp.getItem(position));
            Toast.makeText(Main2Activity.this, ""+adp.getItem(position), 
         Toast.LENGTH_LONG).show();
        }
    });
}  
公共类Main2活动扩展了AppCompative活动{
私人阵列适配器adp;
ListView lv;
阵列列表路径;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
路径=新的ArrayList();
lv=findViewById(R.id.chckimage);
Intent in=getIntent();
path=in.getStringArrayListExtra(“路径”);
adp=新阵列适配器(Main2Activity.this,
android.R.layout.simple\u list\u item\u 1);
低压设置适配器(adp);
loadArrayList(路径);
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图、整型
位置(长id){
ImageView iv=findViewById(R.id.get);
iv.setImageBitmap(adp.getItem(位置));
Toast.makeText(Main2Activity.this,“+adp.getItem(位置),
Toast.LENGTH_LONG).show();
}
});
}  
现在加载图像的方法

 public void loadArrayList(ArrayList<String> Path) {
    try {
        for(String temp:Path){
            MediaMetadataRetriever mmr = new MediaMetadataRetriever();
            mmr.setDataSource(temp);
            byte[] data = mmr.getEmbeddedPicture();
            if (data != null) {
                Glide.with(this)
                        .asBitmap()
                        .load(data)
                        .thumbnail(0.1f)
                        .apply(RequestOptions.circleCropTransform()) //------getting image in circle
                        .listener(new RequestListener<Bitmap>() {
                            @Override
                            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                                return false;
                            }

                            @Override
                            public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                                adp.add(resource);
                                return true;
                            }
                        }).submit();
                mmr.release();
            }else{

                   //LOAD FROM DRAWABLE
            }

        }
    } catch (Exception e){}
}  
public void loadArrayList(ArrayList路径){
试一试{
用于(字符串温度:路径){
MediaMetadataRetriever mmr=新的MediaMetadataRetriever();
mmr.setDataSource(临时);
字节[]数据=mmr.getEmbeddedPicture();
如果(数据!=null){
用(这个)滑翔
.asBitmap()
.加载(数据)
.缩略图(0.1f)
.apply(RequestOptions.circleCropTransform())/----在圆中获取图像
.listener(新的RequestListener(){
@凌驾
public boolean onload失败(@Nullable glide,对象模型,目标,boolean isFirstResource){
返回false;
}
@凌驾
public boolean onResourceReady(位图资源、对象模型、目标、数据源数据源、boolean isFirstResource){
adp.add(资源);
返回true;
}
}).submit();
mmr.release();
}否则{
//可抽出式输送机的负载
}
}
}捕获(例外e){}
}  
在这里,我使用imageview进行检查,现在它给出了另一个错误,如 复制值并从其路径中删除

我想从arraylist中的总路径中获取总图像


我是通过运行同一个应用程序获得此输出的…路径arraylist的大小仅为5。但它会给我输出10个位图图像,每个值都是重复的

尝试将滑动方法从异步更改为同步

public ArrayList<Bitmap> getArrayList(ArrayList<String> Path) {
    try {
        arrayList=new ArrayList<>();
        for(String temp:Path){
            MediaMetadataRetriever mmr = new MediaMetadataRetriever();
            mmr.setDataSource(temp);
            byte[] data = mmr.getEmbeddedPicture();
            if (data != null) {
                FutureTarget<Bitmap> submit = Glide.with(this)
                        .asBitmap()
                        .load(data)
                        .thumbnail(0.1f)
                        .apply(RequestOptions.circleCropTransform()) //------getting image in circle
                        .submit();
                button.setImageBitmap(submit.get());
                arrayList.add(submit.get());
                mmr.release();
            }else{
                Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(),
                        R.drawable.example_picture);
                arrayList.add(bitmap);
                mmr.release();
            }

        }
    } catch (Exception e){
    }
    return arrayList;
}
public ArrayList getArrayList(ArrayList路径){
试一试{
arrayList=新的arrayList();
用于(字符串温度:路径){
MediaMetadataRetriever mmr=新的MediaMetadataRetriever();
mmr.setDataSource(临时);
字节[]数据=mmr.getEmbeddedPicture();
如果(数据!=null){
FutureTarget submit=Glide.with(this)
.asBitmap()
.加载(数据)
.缩略图(0.1f)
.apply(RequestOptions.circleCropTransform())/----在圆中获取图像
.submit();
setImageBitmap(submit.get());
add(submit.get());
mmr.release();
}否则{
位图位图=BitmapFactory.decodeResource(this.getResources(),
R.可绘制。示例(图片);
添加(位图);
mmr.release();
}
}
}捕获(例外e){
}
返回数组列表;
}

现在我为我的问题找到了答案,希望帮助其他人不要陷入同样的问题中

public class GlideBitmap extends AppCompatActivity {
MediaMetadataRetriever mmr;
byte[] data;
ArrayList<Bitmap> BMP;
ListView listView;
Bitmap bitmap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_glide_bitmap);
    listView=findViewById(R.id.bitmap);
    BMP=new ArrayList<>();
    try {
        gettingData();
    } catch (ExecutionException e) {
        e.printStackTrace();
        Toast.makeText(this, ""+e.toString(), Toast.LENGTH_SHORT).show();
    } catch (InterruptedException e) {
        e.printStackTrace();
        Toast.makeText(this, ""+e.toString(), Toast.LENGTH_SHORT).show();
    }
//Here Toast is used to check the size of arraylist that 
//is it equal to path list or not.
    int size=BMP.size();
    Toast.makeText(this, ""+size, Toast.LENGTH_SHORT).show();

}
公共类活动{
MediaMetadataRetriever mmr;
字节[]数据;
阵列列表BMP;
列表视图列表视图;
位图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u glide\u位图);
listView=findViewById(R.id.bitmap);
BMP=新的ArrayList();
试一试{
获取数据();
}捕获(执行例外){
e、 printStackTrace();
Toast.makeText(this,“+e.toString(),Toast.LENGTH_SHORT).show();
}捕捉(中断异常e){
e、 printStackTrace();
Toast.makeText(this,“+e.toString(),Toast.LENGTH_SHORT).show();
}
//这里Toast用于检查
//它是否等于路径列表。
int size=BMP.size();
Toast.makeText(此“”+大小,Toast.LENGTH_SHORT).show();
}
现在让我们看看这个答案的主要方法

public ArrayList<Bitmap> gettingData() throws ExecutionException, InterruptedException {
     mmr=new MediaMetadataRetriever();
                 for(String temp:MainActivity.path){
                     mmr.setDataSource(temp);
                     data=mmr.getEmbeddedPicture();

                                 if(data!=null){
                                     Glide.with(this)
                                                         .asBitmap()
                                                         .load(data)
                                                         .listener(new RequestListener<Bitmap>() {
                                                             @Override
                                                             public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                                                                 return false;
                                                             }

                                                             @Override
                                                             public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                                                                 bitmap=resource;
                                                                 return false;
                                                             }
                                                         }).submit();
                                     BMP.add(bitmap);
                                     bitmap=null;

                                 }else{
                                     Glide.with(this)
                                             .asBitmap()
                                             .load(R.drawable.example_picture)
                                             .listener(new RequestListener<Bitmap>() {
                                                 @Override
                                                 public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                                                     return false;
                                                 }

                                                 @Override
                                                 public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                                                     bitmap=resource;
                                                     return false;
                                                 }
                                             }).submit();
                                     BMP.add(bitmap);
                                     bitmap=null;
                                 }
                 }
       return BMP;
    }
}
public ArrayList gettingData()引发ExecutionException、InterruptedException{
mmr=新的MediaMetadataRetriever();
for(字符串温度:MainActivity.path){
mmr.setDataSource(临时);
data=mmr.getEmbeddedPicture();
如果(数据!=null){
用(这个)滑翔
.asBitmap()
.加载(数据)
.listener(新请求)