5

I want to send a couple of values to a web server from my Android Client using this NameValuePair method:

public void postData() { 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http:/xxxxxxx"); 

    try { 
        // Add your data 
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
        String amount = paymentAmount.getText().toString(); 
        String email = inputEmail.getText().toString(); 
        nameValuePairs.add(new BasicNameValuePair("donationAmount", amount)); 
        nameValuePairs.add(new BasicNameValuePair("email", email)); 
        nameValuePairs.add(new BasicNameValuePair("paymentMethod", "5")); 
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

        // Execute HTTP Post Request 
        HttpResponse response = httpclient.execute(httppost); 

    } catch (ClientProtocolException e) { 
        // TODO Auto-generated catch block 
    } catch (IOException e) { 
        // TODO Auto-generated catch block 
    } 
}  

Unfortunately NameValuePair is only able to send String, I need to send byte[] values as well. Can anybody help me to solve my problem?

2
  • 2
    encode byte[] to Base64 String or use other HttpEntity for example MultipartEntity(3rd party lib is needed ... just google it) Commented Feb 9, 2012 at 13:59
  • when i have send Base64 string how to handle in webservice.i have used asmx using vb.net Commented Feb 9, 2012 at 14:03

2 Answers 2

5
        HttpPost httppost = new HttpPost("http://upload-test.php");
        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
        HttpClient httpClient = new DefaultHttpClient();
        if(bm!=null){
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bm.compress(CompressFormat.JPEG, 75, bos);
            byte[] data = bos.toByteArray();
            ByteArrayBody bab = new ByteArrayBody(data, name+".jpg");
            entity.addPart("file", bab);
        }
        try {
            StringBody sname = new StringBody(name);
            entity.addPart("name", sname);


        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        httppost.setEntity(entity);
        try {
            httpClient.execute(httppost);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

In this example im posting an Image(jpg) and String you can download the multipart post library here: http://hc.apache.org/downloads.cgi bm is a Bitmap. You can use also:

Bundle bundle=new Bundle();
bundle.putString("key", "value");
byte[] b = bundle.getByteArray("key");
ByteArrayBody bab = new ByteArrayBody(b,"info");
Sign up to request clarification or add additional context in comments.

Comments

1

Encode bytes to String : String ba1 = Base64.encodeBytes(ba);

        Bitmap bitmapOrg = BitmapFactory.decodeFile(sdPath);
        ByteArrayOutputStream bao = new ByteArrayOutputStream();

        //Resize the image
        double width = bitmapOrg.getWidth();
        double height = bitmapOrg.getHeight();
        double ratio = 400/width;
        int newheight = (int)(ratio * height);

        System.out.println("———-width" + width);
        System.out.println("———-height" + height);

        bitmapOrg = Bitmap.createScaledBitmap(bitmapOrg, 400, newheight, true);

      //Here you can define .PNG as well
        bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 95, bao);
        byte[] ba = bao.toByteArray();
        String ba1 = Base64.encodeBytes(ba);

        System.out.println("uploading image now ---" + ba1);
        String a = "aaaaa";

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("image", ba1));
        nameValuePairs.add(new BasicNameValuePair("a", a));

        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2:8080/upload_test/upload_image.php");

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();               

            // print responce
            outPut = EntityUtils.toString(entity);
            Log.i("GET RESPONSE—-", outPut);

            //is = entity.getContent();
            Log.e("log_tag ******", "good connection");

            bitmapOrg.recycle();
        }catch (Exception e) {
            Log.e("log_tag ******", "Error in http connection " + e.toString());
        }

1 Comment

this would require a change server side. Not suitable for me.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.