将图像直接从Web服务器设置为imageview

时间:2012-04-17 06:20:13

标签: android android-layout android-imageview android-image

我正在使用ImageView,我想在其中将图像设置为Imageview,但Image(字节数组)直接来自Web服务器..概念是:

1)我正在向Web服务器发送各种参数,作为回报,Web服务器正在向我发送该特定ID的图像。(只是图像,而不是URL)

2)现在我想将Image直接显示到ImageView而不保存到SD卡中,这样每当用户想要查看任何其他ID相关的Image时,Image应该直接来自服务器而我们不会将其保存在我们的目的。

[Editted]

从服务器获取值并以byte []

返回
     static BufferedReader in=null;

byte[] result_image;
          DefaultHttpClient httpClient = new DefaultHttpClient();

        HttpPost httpPost = new HttpPost(uri1);
        if(list!=null)
        {

        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(list);
        httpPost.setEntity(formEntity);

        }
         //URI uri=httpPost.getURI();
        HttpResponse httpResponse = httpClient.execute(httpPost);
        in = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String line = "";
       // String NL = System.getProperty("line.separator");
        while ((line = in.readLine()) != null) {
              sb.append(line +" "); //sb.append(line +NL);
        }
        in.close();



       result_image = String.valueOf(sb).getBytes();

}
    catch(UnsupportedEncodingException e)
    {
        String err = (e.getMessage()==null)?"Cant connect to server":e.getMessage();
        Log.e("Network Error:",err); 
    }
    catch (MalformedURLException e) {
        String err = (e.getMessage()==null)?"Malformed Exception":e.getMessage();
        Log.e("Malformed Exception:",err); 

     } 
     catch(Exception ex)
     {
        // Log.i("Exception,ex", ex.getMessage());
         String err = (ex.getMessage()==null)?"NetworkConnectionException":ex.getMessage();
         Log.e("NetworkConnectionException:",err); 
     }
    finally {

        if (in != null) {
            try {
                    in.close();
             } catch (Exception ex) {
                 String err = (ex.getMessage()==null)?"Excepion":ex.getMessage();
                 Log.e("Exception:",err); 
            }
        }

这里的result_image是一个byte [],并使用这个byte []解码它并在Bitmap中将其剪掉..请帮助... 对此有任何帮助真的很感激.. 感谢..

5 个答案:

答案 0 :(得分:3)

你可以像这样使用

URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
imageView.setImageBitmap(myBitmap);

答案 1 :(得分:0)

试试这个:

Bitmap bMap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
image.setImageBitmap(bMap);

答案 2 :(得分:0)

鉴于您正在从网络加载,您可能希望延迟加载图像。有很多例子。虽然他们中的许多人将图像保存到SD卡中,但您必须将图像调整并存储到某种存储器结构中。

答案 3 :(得分:0)

首先,您不能将url设置为ImageView的DataSource。您必须从URL获得响应并转换为字节。

其次,如果您不想将图像保存到SDCARD,那么在ImageView中简单分配字节数组,此处您不将图像保存到SDCARD。字节数组将一直保留,直到您的应用程序在RAM中处于活动状态。

代码如下。这里的URL指向图像 http://domain/test.jpg

URL myFileUrl =null;          
        try {
             myFileUrl= new URL(url);
        } catch (MalformedURLException e) {
            return false;
        }
        try {
             HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
             conn.setInstanceFollowRedirects(false);
             conn.setDoInput(true);
             conn.connect();                       
             InputStream is = conn.getInputStream();
             Bitmap bitmap = BitmapFactory.decodeStream(is);
             image.setImageBitmap(bitmap);
             return true;
        } catch (IOException e) {
            System.out.println("error="+e.getMessage());
            e.printStackTrace();        
            return false;
        }

答案 4 :(得分:0)

decodeByteArray()方法是建议的方法。 如果它不适合您,您可以像下面的代码一样手动解码。

URL yourl = new URL(src);
HttpURLConnection connection = (HttpURLConnection) yourl.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();                                
bis = new BufferedInputStream(input,int);                   
baf = new ByteArrayBuffer(int);

int current = 0;                        
while ((current = bis.read()) != -1) {                  
baf.append((byte) current);
}

希望上面的代码向您展示一些替代想法。快乐的编码。