-1

我正在研究 ImageView,我想在其中将图像设置为 Imageview,但 Image(byte array) 直接来自 Web 服务器。概念是:

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

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

[已编辑]

从服务器获取值并在 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 是一个字节 [] 并且使用这个字节 [] 正在对其进行解码并在位图中显示它..请帮助...对此的任何帮助非常感谢..谢谢..

4

6 回答 6

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);
于 2012-04-17T06:27:12.657 回答
0

试试这个:

Bitmap bMap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
image.setImageBitmap(bMap);
于 2012-04-17T06:26:59.307 回答
0

鉴于您是从网络加载的,您可能想要延迟加载图像。这方面的例子很多。尽管他们中的许多人将图像保存到 sd 卡中,但您必须调整图像并将其存储到某种内存结构中。

于 2012-04-17T06:31:53.210 回答
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;
        }
于 2012-04-17T06:37:59.940 回答
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);
}

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

于 2012-04-17T07:18:50.560 回答
0
if we use  asynctask then like this 
//declare Bitmap 
//new Loading().execute("http://Hsot/123.jpg"); //Call the asynctask

protected Bitmap doInBackground(String... args)
 {         
 bitmap=BitmapFactory.decodeStream((InputStream)newURL(args[0]).getContent());
 return bitmap;
}
 protected void onPostExecute(Bitmap image) 
{
     my_image.setImageBitmap(image);
     my_image2.setImageBitmap(image);
}
于 2015-04-29T22:09:13.810 回答