Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sending byte HTTP using NameValuePair?

Tags:

android

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?

like image 454
Selva Avatar asked Feb 09 '12 13:02

Selva


2 Answers

        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");
like image 150
jsaye Avatar answered Oct 05 '22 23:10

jsaye


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());
        }
like image 20
Vinh Luffy Avatar answered Oct 06 '22 00:10

Vinh Luffy