是否可以将来自 URL 的图像放入 android 的 imagebutton 中?

Posted

技术标签:

【中文标题】是否可以将来自 URL 的图像放入 android 的 imagebutton 中?【英文标题】:Is it possible to put an image from a URL in a imagebutton in android? 【发布时间】:2010-10-25 02:29:25 【问题描述】:

我想做的是一个数据库列表视图 右侧有一个小图像按钮和文本, 我希望小图像使用由给出的 URL 进行更改 一个文本文件,但我被卡住了,2 小时规则结束了

对于(文件长度) 所以 URL 是 www.site.com/images/(i++).png

【问题讨论】:

我想我想做的是。由于各种原因,不可能。 可能并非不可能。你能试着更彻底地解释一下这个问题吗? 【参考方案1】:

您想要做的事情肯定是可能的,但是您需要手动获取图像并将其设置在 ImageButton 上。

这里有一个小方法可以用来获取图片:

private Bitmap fetchImage( String urlstr )

    try
    
        URL url;
        url = new URL( urlstr );

        HttpURLConnection c = ( HttpURLConnection ) url.openConnection();
        c.setDoInput( true );
        c.connect();
        InputStream is = c.getInputStream();
        Bitmap img;
        img = BitmapFactory.decodeStream( is );
        return img;
    
    catch ( MalformedURLException e )
    
        Log.d( "RemoteImageHandler", "fetchImage passed invalid URL: " + urlstr );
    
    catch ( IOException e )
    
        Log.d( "RemoteImageHandler", "fetchImage IO exception: " + e );
    
    return null;

当然,您会希望将此方法包装在一个线程中(在 SDK 1.5 中使用 AsyncTask 或在 SDK pre 1.5 中使用 UserTask),然后只需调用:

myImageButton.setImageBitmap( bitmap );

我认为这已经回答了您的问题,如果没有,请进一步详细说明。

【讨论】:

如果你喜欢我并且你的列表相当长并且图像可能很大,那么行“img = BitmapFactory.decodeStream(is );”会让你很快进入 OOM(内存不足)领域。幸运的是,SO 对此也有很多答案。只是需要注意的事情。 gl!【参考方案2】:

上面的 fetchImage 代码失败 DEBUG/skia(xxxx): --- decoder->decode returned false 如果它被重复调用。 (***.com 上已经对此进行了多次讨论)

这不是崩溃或可捕获的错误,而是返回一个空位图。

这个替代的 fetchImage 有效(谁能说出为什么?):

    private Bitmap fetchImage(String urlstr)
    InputStream is= null;
    Bitmap bm= null;
    try
        HttpGet httpRequest = new HttpGet(urlstr);//bitmapUrl.toURI());
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);

        HttpEntity entity = response.getEntity();
        BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
        is = bufHttpEntity.getContent();
        bm = BitmapFactory.decodeStream(is); 
    catch ( MalformedURLException e )
        Log.d( "RemoteImageHandler", "fetchImage passed invalid URL: " + urlstr );
    catch ( IOException e )
        Log.d( "RemoteImageHandler", "fetchImage IO exception: " + e );
    finally
        if(is!=null)try
            is.close();
        catch(IOException e)
    
    return bm;

【讨论】:

以上是关于是否可以将来自 URL 的图像放入 android 的 imagebutton 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 上显示来自 URL 的图像

OneSignal - 使用来自 url 的自定义图像从 android 应用发送通知

在 Android(java) 中,如何使用 URL 而不是来自互联网的图像地址在 ImageView 中加载图像?

是否可以将图像放入输入类型 =“复选框”?

将来自 url 的图像添加到自定义 InfoWindow google maps v2

从 URL 显示图像到 Android 应用程序