2012-02-09 3 views
5

Я хочу, чтобы отправить пару значений к веб-серверу из моего Android Client с помощью этого метода пар имя:Как отправить байт HTTP с помощью NameValuePair?

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

К сожалению, пар имя только в состоянии отправить строку, мне нужно отправить байт [] значения, а также. Может ли кто-нибудь помочь мне решить мою проблему?

+2

закодировать 'байт []' в Base64 строки или использовать другой 'HttpEntity', например,' MultipartEntity' (третья сторона Lib нужна ... только Google его) – Selvin

+0

мне нужно отправить изображение. – Selva

+0

, когда я отправил строку Base64, как обрабатывать в webservice.i использовали asmx, используя vb.net – Selva

ответ

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

В этом примере им размещая изображения (JPG) и строку вы можете загрузить многослойную пост библиотеки здесь: http://hc.apache.org/downloads.cgi Ьта является Bitmap. Вы также можете использовать:

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

закодировать байтов в строку: String = ba1 Base64.encodeBytes (ба);

 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

для этого потребовалась бы сторона сервера изменений. Не подходит для меня. –

Смежные вопросы