2012-02-09 55 views
5

我想從我的Android客戶端使用此的NameValuePair方法的幾個值發送到Web服務器:如何使用NameValuePair發送字節HTTP?

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 
    } 
} 

不幸的NameValuePair只能夠發送字符串,我需要發送的字節[]值也。任何人都可以幫我解決我的問題嗎?

+2

編碼'的byte []'爲Base64字符串或使用其他'HttpEntity'例如'MultipartEntity'(需要第三方的lib ......它只是谷歌) – Selvin 2012-02-09 13:59:28

+0

我需要發送圖像。 – Selva 2012-02-09 14:02:42

+0

當我發送Base64字符串如何處理webservice.i已使用asmx使用vb.net – Selva 2012-02-09 14:03:58

回答

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(); 
     } 

在這個例子中的IM發佈的圖片(JPG格式)和字符串,你可以下載到多交庫的位置:http://hc.apache.org/downloads.cgi BM是一個位圖。 。也可以使用:

Bundle bundle=new Bundle(); 
bundle.putString("key", "value"); 
byte[] b = bundle.getByteArray("key"); 
ByteArrayBody bab = new ByteArrayBody(b,"info"); 
1

編碼字節字符串:字符串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()); 
     } 
+0

這將需要更改服務器端。不適合我。 – 2016-07-06 15:09:06