我正在使用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中将其剪掉..请帮助... 对此有任何帮助真的很感激.. 感谢..
答案 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);
}
希望上面的代码向您展示一些替代想法。快乐的编码。