Android Studio:我无法从Firebase服务器下载图片列表

时间:2017-07-16 17:34:22

标签: android firebase bitmap download firebase-storage

我使用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;
    }

}

0 个答案:

没有答案