Ich versuche, eine Klasse zu erstellen, die Image abrufen und im Arbeitsspeicher zwischenspeichern, aber es gibt keinen Wert an meine List-Adapter-Klasse zurück. Beim Debuggen kann ich den Bitmap-Wert in GetImagesBitmap sehen, aber nach der Rückkehr zu ListTestAdapter ist der Wert null. Kann mir bitte jemand helfen? Vielen Dank.Android Bitmap gibt null von anderer Klasse zurück
Das ist mein GetImagesBitmap Klasse, die Wert auf ListTestAdapter
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;
import java.net.URL;
public class GetImagesBitmap extends AsyncTask<Void, Void, Bitmap> {
private final String TAG = "MY_MESSAGE";
private Bitmap bitmap;
private String url;
public GetImagesBitmap() {
}
public GetImagesBitmap(String url) {
this.url = url;
}
@Override
protected Bitmap doInBackground(Void... params) {
Bitmap bitmap1 = (Bitmap) ImageCache.getInstance().getLru().get(url);
if (bitmap == null) {
try {
URL newurl = new URL(url);
bitmap1 = BitmapFactory.decodeStream(newurl.openConnection().getInputStream());
ImageCache.getInstance().getLru().put(url, bitmap1);
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
return bitmap1;
}
@Override
protected void onPostExecute(Bitmap bitmap2) {
this.bitmap = bitmap2;
}
public Bitmap getBitmap() {
return bitmap;
}
}
ListTestAdapter.java
package com.example.chaifs.test.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ToggleButton;
import com.example.chaifs.test.R;
import com.example.chaifs.test.controller.GetImagesBitmap;
import com.example.chaifs.test.model.*;
import java.util.List;
public class ListTestAdapter extends BaseAdapter {
private final String TAG = "MY_MESSAGE";
private List<Test> mItems;
private LayoutInflater mInflater;
public ListTestAdapter(Context context, List<Test> listTest) {
this.setItems(listTest);
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return (getItems() != null && !getItems().isEmpty()) ? getItems().size() : 0;
}
@Override
public Test getItem(int position) {
return (getItems() != null && !getItems().isEmpty()) ? getItems().get(position) : null;
}
@Override
public long getItemId(int position) {
return (getItems() != null && !getItems().isEmpty()) ? getItems().get(position).getId() : position;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
final ViewHolder holder;
View v = convertView;
if (v == null) {
v = mInflater.inflate(R.layout.list_test, parent, false);
holder = new ViewHolder();
holder.imgView = (ImageView) v.findViewById(R.id.imgView);
holder.txtId = (TextView) v.findViewById(R.id.txt_id);
holder.button1 = (ToggleButton) v.findViewById(R.id.tgl_status);
holder.button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
// fill row data
Test currentItem = getItem(position);
if (currentItem != null) {
holder.txtId.setText(currentItem.getId().toString());
holder.button1.setChecked(currentItem.getBookmarkStatus().equals("true") ? true : false);
//this part which cannot get the bitmap return value
GetImagesBitmap getImagesBitmap = new GetImagesBitmap(currentItem.getImageURL());
getImagesBitmap.execute();
Bitmap bitmap = getImagesBitmap.getBitmap();
Log.e(TAG, "size of bitmap" + String.valueOf(bitmap.getByteCount()));
holder.imgView.setImageBitmap(bitmap);
}
return v;
}
public List<Test> getItems() {
return mItems;
}
public void setItems(List<Test> mItems) {
this.mItems = mItems;
}
class ViewHolder {
ImageView imgView;
TextView txtId;
ToggleButton button1;
}
}
Wenn Bilder aus dem Internet geladen werden, verwenden Sie die Picasso-Bibliothek. –