在ImageView中显示从数据库下载的图像

时间:2016-01-22 02:45:32

标签: java android amazon-web-services

我正在开发一款Android应用程序,允许用户从数据库上传/下载图像(由Amazon AWS提供支持)。 我面临的问题是我可以成功将文件下载到目录

/storage/emulated/0/data/myfile.jpg

但我无法将它们显示为新的ImageView。

以下是我处理显示方法的方法。请注意,RefreshFeedTask.downloadedFiles是一个位图列表,如下所示:

 do {
        objectListing = s3Client.listObjects(listObjectsRequest);
        for (S3ObjectSummary objectSummary :
                objectListing.getObjectSummaries()) {

           keys.add(objectSummary.getKey());
        }
        listObjectsRequest.setMarker(objectListing.getNextMarker());
    } while (objectListing.isTruncated());

    Iterator<String> o = keys.iterator();

    while(o.hasNext())
    {

        String n = o.next();
        File file = new File(Environment.getExternalStorageDirectory()+"/data/", n);
        if(!file.exists())
        {
            try {
                file.createNewFile();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        TransferObserver observer = transferUtility.download(
                existingBucketName,
                n,
                file);

        Bitmap m = BitmapFactory.decodeFile(file.getAbsolutePath());
 private void refreshFeed()
{

    new RefreshFeedTask(this).start();
    for(Bitmap f : RefreshFeedTask.downloadedFiles)
    {
        displayImage(f);
    }

}

private void displayImage(Bitmap f){

    ImageView myImage = new ImageView(this);
    myImage.setImageBitmap(f);
    myImage.setVisibility(View.VISIBLE);
    Log.i("Background","Displaying file");

}

任何帮助都表示赞赏,因为我对Android开发有点新手,但是不是 Java开发。

2 个答案:

答案 0 :(得分:0)

您在这里遇到的一个问题是所有权。

建议:您刚刚下载到该位置的文件,您的应用可能不会拥有该位置。如果这是一个封闭的生态系统,您是该文件的唯一用户和所有者,则应该在运行应用程序时创建特定于应用程序的目录。

在Sdcard中显示您不拥有的内容的最佳方式是使用Android中的MediaStore API来访问它们。您需要一个到正确路径的URI,并且通常不建议执行绝对路径,尤其是对于图像资源。

这方面的一个很好的例子是: https://dzone.com/articles/displaying-images-sd-card

答案 1 :(得分:0)

您似乎没有向任何视图添加新的ImageView,请尝试将新的ImageView添加到任何容器中以显示它。

parentLayout.addView(theNewImageView);

另一个提示:如果您想更有效地显示许多图像,可以尝试Glide