我正在开发一款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开发。
答案 0 :(得分:0)
您在这里遇到的一个问题是所有权。
建议:您刚刚下载到该位置的文件,您的应用可能不会拥有该位置。如果这是一个封闭的生态系统,您是该文件的唯一用户和所有者,则应该在运行应用程序时创建特定于应用程序的目录。
在Sdcard中显示您不拥有的内容的最佳方式是使用Android中的MediaStore API来访问它们。您需要一个到正确路径的URI,并且通常不建议执行绝对路径,尤其是对于图像资源。
这方面的一个很好的例子是: https://dzone.com/articles/displaying-images-sd-card
答案 1 :(得分:0)
您似乎没有向任何视图添加新的ImageView
,请尝试将新的ImageView
添加到任何容器中以显示它。
parentLayout.addView(theNewImageView);
另一个提示:如果您想更有效地显示许多图像,可以尝试Glide。