如何获得Arraylist 在Glide的帮助下作为输出?

问题描述 投票:1回答:2

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

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

filterpath == MP3文件的路径。

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

Glide版本== 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();
        }
    });
}  

现在加载图像的方法.....

 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){}
}  

在这里,我使用imageview进行检查,现在它给出了像duplicates值这样的错误,并且还从它们的路径中删除了

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

我通过运行相同的应用程序获得此输出...并且路径arraylist的大小仅为5.但它给我输出10个位图图像与每个值的重复

android thumbnails android-bitmap android-glide
2个回答
1
投票

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

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();

}

现在让我们看看这个答案的主要方法......

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;
    }
}

0
投票

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

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.