我使用Firebase从服务器下载图片并将其显示在Android Studio的列表视图中。具体来说,它是我存储在一个数组中的图片列表,我稍后将其用于列表视图 如果我只需要下载一个图像代码就可以正常工作,问题是当我收到多个图像时,listview只显示空白图像,但最后一个图像除外,这是该点的正确图像。我已经将该列表视图用于其他内容,我知道它有效 这是我的方法:
public void fetchImages(Map<String,Object> bitmaps) {
for (Map.Entry<String, Object> entry : bitmaps.entrySet()) {
storageRef = storage.getReference().child(entry.getKey());
try {
localFile = File.createTempFile("FileTemp", "jpg");
storageRef.getFile(localFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
returnedBitmaps[i++] = BitmapFactory.decodeFile(localFile.getAbsolutePath());
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
}
});
} catch(Exception e) {
}
}
}
我知道我总是得到一些等于数组维度的图片,所以我不会在那部分出错。如果我尝试taskSnapshot.getBytesTransferred()
,我会得到服务器上图片的确切字节数,所以我认为图片就在那里,当我试图显示它们时,我只是做错了。任何帮助将不胜感激,谢谢。
编辑:这是我在listview上使用的方法:
public void fixImages () {
listItemsName = new String[returnedContacts.length];
imageNameBitmap = new Bitmap[returnedContacts.length];
int count = 0;
while (count < returnedContacts.length) {
listItemsName[count] = returnedContacts[count].name + " " + returnedContacts[count].lastName;
imageNameBitmap[count] = returnedBitmaps[count];
count++;
}
listView = (ListView)findViewById(R.id.listView1);
try {
listAdapterBitmap = new ListAdapterBitmap(CheckFollows.this, listItemsName, imageNameBitmap);
}
catch (Exception e) {
e.printStackTrace();
}
listView.setAdapter(listAdapterBitmap);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(returnedContacts[position] != null) {
Intent intent = new Intent(CheckFollows.this, PersonBrowsed.class);
startActivity(intent);
}
}
});
}
列表视图右侧显示使用listItemName
数组的名称和姓氏,同时使用imageNameBitmap
数组在左侧显示图片。
类ListAdapterBitmap:
import android.app.Activity;
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
class ListAdapterBitmap extends ArrayAdapter<String> {
private final Activity Context;
private final String [] ListItemsName;
private final Bitmap [] ImageName;
ListAdapterBitmap(Activity context, String [] content, Bitmap [] ImageName) {
super(context, R.layout.list_items, content);
this.Context = context;
this.ListItemsName = content;
this.ImageName = ImageName;
}
@NonNull
public View getView(int position, View view,@NonNull ViewGroup parent) {
LayoutInflater inflater = Context.getLayoutInflater();
View ListViewSingle = inflater.inflate(R.layout.list_items, null, true);
TextView ListViewItems = (TextView)ListViewSingle.findViewById(R.id.tvSportName);
ImageView ListViewImage = (ImageView)ListViewSingle.findViewById(R.id.imgSportPicture);
ListViewItems.setText(ListItemsName[position]);
ListViewImage.setImageBitmap(ImageName[position]);
return ListViewSingle;
}
}