该图像显示了经过混洗和重复的当前输出
我有一个要从其中提取缩略图的arraylist mp3文件路径,它与“位图的第一个代码”配合正常,但提取速度太慢。
filterpath == MP3文件的路径。
MEDIACOVER ==用于存储位图图像的数组列表。
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();
}
});
}
现在用于加载图像的方法.....
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进行检查,现在出现了另一个错误,例如 重复值,并且从其路径中隐藏
我想从arraylist中的全部路径中获取全部图像
我通过运行相同的应用程序得到此输出...并且路径arraylist的大小仅为5。但是它给我输出了10个位图图像,每个值都有重复
答案 0 :(得分: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();
}
现在让我们看看这个答案的Main方法...
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;
}
}
答案 1 :(得分: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;
}