如何将多个位图图像发送到服务器

时间:2016-09-06 06:37:46

标签: android

我想将多个图像发送到服务器。我已经为每个选定的图像创建了位图。但是最后一个位图图像被发送到服务器。如何在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);
            }

        }
    }

2 个答案:

答案 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中。将它移到外面将解决您的问题。