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.