我在使用Google Places API将图片从网址加载到我的Android应用中时遇到了问题。
我得到了API工作的部分,如果我在浏览器中输入URL,我可以看到图像。代码在以下行中失败: 位图myBitmap = BitmapFactory.decodeStream(输入);
奇怪的是,它只是跳转到catch子句中的return null而不执行println命令。
我还应该解释一下,我使用了两个网址,因为Google API中的第一个网址是重定向网页。
我认为问题在于,正在加载的最终页面实际上并不是真正的"真实的"图像(我的意思是它看起来像 https://lh4.googleusercontent.com/XXX/s1600-w400/ 而不是像 http://something/image.jpg)
以下是我使用的整个方法:
public Bitmap getImageData(Place p) {
try {
String src= "https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference="+
p.getPhoto_reference()+
"&key="+
this.context.getResources().getString(places_api);
Log.d("srcsrc", src);
URL url = new URL(src);
HttpsURLConnection ucon = (HttpsURLConnection) url.openConnection();
ucon.setInstanceFollowRedirects(false);
URL secondURL = new URL(ucon.getHeaderField("Location"));
HttpsURLConnection connection = (HttpsURLConnection) secondURL.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("Bitmap exception" + e);
return null;
}
}
感谢您的帮助。
答案 0 :(得分:1)
像这样使用毕加索:
Picasso.with(context).load(src).into(imageView );
它将执行以下操作:
在适配器中处理ImageView回收和下载取消。 复杂的图像转换,内存使用最少。 自动内存和磁盘缓存。