我的GAE实例提供存储在Google数据存储中的图片:
def serveAvatarByName(request,username):
entity_list = Entity.gql("WHERE username = :1", username)
entity = entity_list.get()
if entity:
image_data = entity.image
response = HttpResponse(image_data)
response['Content-Type'] = entity.content_type
else:
image_data = open("static/img/anonymous.png", "rb").read()
response = HttpResponse(image_data)
response['Content-Type'] = 'image/png'
response['Accept-Ranges'] = 'bytes'
response['Cache-Control'] = 'max-age=86400'
return response
我的图片URI通常如下所示:
http://my-app.appspot.com/serve_avatar/user1.png
我的Android客户端使用梦幻般的Sergey Tarasevich的Universal Image Loader获取这些图像,配置如下:
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration
.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions).build();
ImageLoader.getInstance().init(config);
并检索它们:
String imageUri1 = "http://my-app.appspot.com/serve_avatar/user1.png";
//String imageUri2 = "http://xpda.com/junkmail/junk207/jpgcompressionb1.png";
ImageLoader.getInstance().displayImage(imageUri1, imageView);
第一张图片(imageUri1)是存储在我的Google数据存储实例中的PNG,在指向imageUri1的浏览器中显示正确,但UIL失败,在日志中显示以下消息:
03-28 10:41:37.093: D/skia(25780): --- SkImageDecoder::Factory returned null
如果我实现onLoadingFailed方法并打印“failReason”,我会得到“IO_ERROR”,但没有别的。
如果用户尚未上传头像图片,则会提供默认图片(anonymous.png)。这也不起作用。
请注意,访问第二个图像时,UIL可以正常工作(imageUri2,一个png文件)。
标题看起来像这样:
imageUri1 - http://my-app.appspot.com/serve_avatar/user1.png:
HTTP request status: 200 (OK)
Date Thu, 28 Mar 2013 18:05:46 GMT
Cache-Control max-age=86400
Server Google Frontend
Accept-Ranges bytes
Content-Length 41686
Vary Cookie
Content-Type image/png
imageUri2 - http://xpda.com/junkmail/junk207/jpgcompressionb1.PNG:
HTTP request status: 200 (OK)
Date Thu, 28 Mar 2013 14:14:58 GMT
ETag "5de35c2e5eeca1:0"
Last-Modified Sat, 08 May 2010 19:36:30 GMT
Server Microsoft-IIS/7.0
X-Powered-By ASP.NET
Content-Type image/png
Cache-Control max-age=86400
Accept-Ranges bytes
Content-Length 535279
知道可能出现什么问题吗?
答案 0 :(得分:1)
UIL使用1.8.2之前的FlushedInputStream
进行图片下载(http://code.google.com/p/android/issues/detail?id=6066)。这可能是您遇到问题的原因。由于1.8.2 FlushedInputStream
默认情况下未使用,但可以ImageLoader.handleSlowNetwork(true)
启用。
因此,请尝试更新为 1.8.2 。