我想将多个图像发送到服务器。我已经为每个选定的图像创建了位图。但是最后一个位图图像被发送到服务器。如何在android中一次发送所有位图图像。我试过像此
class ImageUploadTask extends AsyncTask<String, Void, String> {
String sResponse = null;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = ProgressDialog.show(Room_addroom1.this, "Uploading",
"Please wait...", true);
dialog.show();
}
@Override
protected String doInBackground(String... params) {
try {
String url ="http://airbnb.abservetech.com/demo/public/mobile/hotel/roomsadd";
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(url);
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
int i=0;
mImageIds = new ArrayList<String>();
ByteArrayBody mImageByteArray = null;
for ( i = 0; i < ImgData.size(); i++) {
Log.d("ImgData(i)--", String.valueOf(ImgData.get(i)));
Bitmap bitmap = decodeFile(ImgData.get(i));
String image = getStringImage(bitmap);
mImageIds.add(image);
Log.d("Image--", image);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byteArray = stream.toByteArray();
mImageByteArray = new ByteArrayBody(byteArray, Long.toString(System.currentTimeMillis()) + ".jpg");
entity.addPart("room_images", mImageByteArray);
Log.d("ByteArray--", String.valueOf(mImageByteArray));
// entity.addPart("room_images", mImageByteArray);
}
Log.d("ByteArray-out--", String.valueOf(mImageByteArray));
/* entity.addPart("room_images", new ByteArrayBody(byteArray,
"image/jpeg", params[1]));*/
entity.addPart("user_id", new StringBody("52"));
entity.addPart("room_type",new StringBody( "premium"));
entity.addPart("room_prize", new StringBody("2356"));
httpPost.setEntity(entity);
// String entityContentAsString = new String(bos.toByteArray());
// Log.e("multipartEntitty:", "" + entityContentAsString);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
entity.writeTo(bytes);
String content = bytes.toString();
String content1 = entity.toString();
/* Log.e("MultiPartEntityRequest:",content);
Log.e("MultiPartEntity---11:",content1);*/
HttpResponse response = httpClient.execute(httpPost,
localContext);
sResponse = EntityUtils.getContentCharSet(response.getEntity());
System.out.println("sResponse : " + sResponse);
} catch (Exception e) {
if (dialog.isShowing())
dialog.dismiss();
Log.e(e.getClass().getName(), e.getMessage(), e);
}
return sResponse;
}
@Override
protected void onPostExecute(String sResponse) {
try {
if (dialog.isShowing())
dialog.dismiss();
if (sResponse != null) {
count++;
if (count <ImgData.size()) {
Toast.makeText(getApplicationContext(),
sResponse + " Photo uploaded successfully",
Toast.LENGTH_SHORT).show();
// new ImageUploadTask().execute(count + "", "hm" + count
// + ".jpg");
}
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(),
Toast.LENGTH_LONG).show();
Log.e(e.getClass().getName(), e.getMessage(), e);
}
}
}
答案 0 :(得分:0)
首先,您可以创建到base64的位图。 然后创建这些所有base64位图字符串的jsonstring,并发送JsonString以发布服务器。 将多个图像发送到服务器很容易。
另一种方式, 当您选择第一个图像时,您在将base64发送到服务器时创建这些图像的base64,然后选择另一个图像并转换为base64并将另一个base64发送到服务器。该方法还用于逐个图像存储到服务器。
答案 1 :(得分:0)
试试这个:
mImageIds = new ArrayList<String>();
for ( i = 0; i < ImgData.size(); i++) {
Log.d("ImgData(i)--", String.valueOf(ImgData.get(i)));
Bitmap bitmap = decodeFile(ImgData.get(i));
String image = getStringImage(bitmap);
mImageIds.add(image);
Log.d("Image--", image);
entity.addPart("images", new StringBody(image));
}
你唯一错误的是你为for循环的每次迭代初始化了ArrayList的一个新对象。因此,只有最后一个元素被添加到ArrayList中。将它移到外面将解决您的问题。