从 Android 中的 Google 地方信息加载图像

Posted

技术标签:

【中文标题】从 Android 中的 Google 地方信息加载图像【英文标题】:Load image from Google Places in Android 【发布时间】:2017-05-02 09:08:21 【问题描述】:

我在使用 Google Places API 将 URL 中的图片加载到我的 android 应用时遇到问题。

我得到了 API 工作的部分,如果我在浏览器中输入 URL,我可以看到图像。代码在以下行中失败: 位图 myBitmap = BitmapFactory.decodeStream(input);

奇怪的是,它只是直接跳转到catch子句中的return null,而不执行println命令。

我还应该解释一下,我使用了两个 URL,因为 google API 中的第一个 URL 是重定向页面。

我认为问题在于正在加载的最终页面实际上不是“真实”图像(我的意思是它看起来像 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;
    

感谢您的帮助。

【问题讨论】:

用毕加索试试square.github.io/picasso很简单 问题已解决。这真的很有帮助,谢谢! 【参考方案1】:

像这样使用毕加索:

            Picasso.with(context).load(src).into(imageView );

它将执行以下操作:

在适配器中处理 ImageView 回收和下载取消。 使用最少的内存进行复杂的图像转换。 自动内存和磁盘缓存。

【讨论】:

以上是关于从 Android 中的 Google 地方信息加载图像的主要内容,如果未能解决你的问题,请参考以下文章

从 Google 地图向带有地理信息的 Android 应用发送 Intent

现实世界中哪些地方用到了Java?

Android google Places API超出了每日配额

从 Google Maps JS API 中移除其他地方?

如何收听 Google Wallet / Android Pay Fragment 中的更改按钮?

制作从 google 下载的圆形照片(google places,swift)