Ich habe einen ViewPager mit 4 ListViews.The Liste zeigt alle Download-Bilder und ich möchte sie zwischenspeichern, aber es gibt einen Fehler und die App funktioniert sehr langsam. Gibt es eine Möglichkeit, alle Bilder in 1 LruCache oder ähnlichem zu cachen? Dies ist mein Code so weit erste Liste AdapterViewPager und ListView Cache
public class TwitchAdapter extends ArrayAdapter<Twitch>{
private Context context;
private int resourceId;
private ArrayList<Twitch> twitchList;
LruCache<Integer,Bitmap> logoCache;
LruCache<Integer,Bitmap> iconCache;
public TwitchAdapter(Context c, int resId, ArrayList<Twitch> objects){
super(c, resId, objects);
this.context = c;
this.resourceId = resId;
this.twitchList = objects;
final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024);
iconCache = new LruCache<Integer, Bitmap>(maxMemory/16);
logoCache = new LruCache<Integer, Bitmap>(maxMemory/64);
}
public View getView(final int position, View convertView, final ViewGroup parent){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(resourceId, parent, false);
final Twitch twitch = twitchList.get(position);
TextView viewrs = (TextView) view.findViewById(R.id.viewers);
TextView language = (TextView) view.findViewById(R.id.language);
TextView status = (TextView) view.findViewById(R.id.streamer_status);
TextView name = (TextView) view.findViewById(R.id.streamer_name);
ImageView profile = (ImageView) view.findViewById(R.id.logo);
CircleImageView imageView = (CircleImageView) view.findViewById(R.id.twitch_icon);
int id = twitch.getId();
status.setText(twitch.getStatus());
language.setText(twitch.getLanguage());
name.setText(twitch.getName());
viewrs.setText(twitch.getViewrs()+"");
Bitmap bitmapIcon = iconCache.get(id+1);
if (bitmapIcon != null){
imageView.setImageBitmap(bitmapIcon);
}else {
LoadImageTask(twitch,imageView);
}
Bitmap bitmapLogo = logoCache.get(twitch.getId());
if (bitmapLogo != null){
profile.setImageBitmap(bitmapLogo);
}else {
LoadIconTast(twitch,profile);
}
return view;
}
public void LoadImageTask(final Twitch twitch, final ImageView iconView){
ImageRequest request =new ImageRequest(twitch.getIconUrl(), new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
iconView.setImageBitmap(response);
iconCache.put(twitch.getId()+1,response);
}
}, 0, 0, null, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestQueue quew = Volley.newRequestQueue(context);
quew.add(request);
}
private void LoadIconTast(final Twitch twitch, final ImageView profileView) {
ImageRequest request =new ImageRequest(twitch.getLogoUrl(), new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
profileView.setImageBitmap(response);
iconCache.put(twitch.getId(),response);
notifyDataSetChanged();
}
}, 0, 0, null, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestQueue quew = Volley.newRequestQueue(context);
quew.add(request);
}
}
Und ein anderer genau wie dieser und das ist Fehler
12-06 19:15:24.392 31970-2219/app.mma.introsliderproject E/AndroidRuntime: FATAL EXCEPTION: Thread-100374
Process: app.mma.introsliderproject, PID: 31970
java.lang.OutOfMemoryError: Failed to allocate a 17 byte allocation with 27048 free bytes and 26KB until OOM
at com.android.volley.toolbox.DiskBasedCache.streamToBytes(DiskBasedCache.java:323)
at com.android.volley.toolbox.DiskBasedCache.readString(DiskBasedCache.java:541)
at com.android.volley.toolbox.DiskBasedCache.readStringStringMap(DiskBasedCache.java:564)
at com.android.volley.toolbox.DiskBasedCache$CacheHeader.readHeader(DiskBasedCache.java:404)
at com.android.volley.toolbox.DiskBasedCache.initialize(DiskBasedCache.java:157)
at com.android.volley.CacheDispatcher.run(CacheDispatcher.java:84)
ich weiß, dass aber trotzdem muss ich alle Listen Bilder in einem Cache speichern Ich möchte wissen, wie ich tun kann, dass –
Was „ein Cache“ bedeutet ist? Ich verstehe nicht, warum diese Lösung nicht für Sie geeignet ist, fügen Sie bitte einige Details hinzu. –
alle Bilder auf meinem ViewPager auf einem einzigen Cache speichern nicht gleich mein Code in 3 LruCaches –