2012-02-22 36 views
14

Tôi muốn gửi văn bản JSON {} tới dịch vụ web và đọc câu trả lời. Làm thế nào tôi có thể làm điều này từ android? các bước như tạo đối tượng yêu cầu, thiết lập tiêu đề nội dung, vv là gìCách gửi đối tượng JSON qua Yêu cầu HttpClient với Android?

Mã của tôi là ở đây

public void postData(String result,JSONObject obj) { 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpParams myParams = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(myParams, 10000); 
    HttpConnectionParams.setSoTimeout(myParams, 10000); 

    String json=obj.toString(); 

    try { 

     HttpPost httppost = new HttpPost(result.toString()); 
     StringEntity se = new StringEntity(obj.toString()); 
     se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
     httppost.setEntity(se); 

     HttpResponse response = httpclient.execute(httppost); 
     String temp = EntityUtils.toString(response.getEntity()); 
     Log.i("tag", temp); 


    } catch (ClientProtocolException e) { 

    } catch (IOException e) { 
    } 
} 

gì sai lầm tôi đã làm plz đúng tôi, bởi vì nó cho thấy tôi một yêu cầu xấu lỗi nhưng khi tôi gửi trong tấm áp phích nó cho thấy tôi tình trạng như thành công 200 ok

+0

Thử đặt loại này 'entity.setContentType (" application/json; charset = UTF-8 "); \t \t \t \t entity.setContentEncoding (BasicHeader mới (HTTP.CONTENT_TYPE, \t \t \t \t \t \t "application/json; charset = UTF-8")); ' – MKJParekh

+0

@Soni Không nó không làm việc tốt cho tôi, tôi đã thử nó nhưng nó cho tôi thấy lỗi yêu cầu không hợp lệ –

+0

@Soni lỗi duy nhất đã làm là im không setHeader như thế này trong bài dưới đây httppost.setHeader ("Content-type", "application/json"); –

Trả lời

13

tôi làm điều này với

httppost.setHeader("Content-type", "application/json"); 

Ngoài ra, các new HttpPost() lấy URL dịch vụ web làm đối số.

+0

Thanku nó hoạt động cho tôi –

1

Trong vòng cố gắng nắm bắt, tôi đã làm điều này:

  HttpPost post = new HttpPost(
     "https://www.placeyoururlhere.com"); 
     post.setHeader(HTTP.CONTENT_TYPE,"application/json"); 
     List<NameValuePair> nameValuePairs = new 
     ArrayList<NameValuePair>(1); 
     nameValuePairs.add(new BasicNameValuePair("json", json)); 
     post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     HttpClient client = new DefaultHttpClient(); 
     HttpResponse resp = client.execute(post); 
     HttpEntity entity = resp.getEntity(); 

     response = EntityUtils.toString(entity); 

Bạn có thể thêm nameValurPairs của bạn theo cách nhiều lĩnh vực mà bạn có. Thông thường JSON có thể trở nên rất lớn, sau đó tôi sẽ đề nghị gzipping nó sau đó gửi, nhưng nếu JSON của bạn là khá nhỏ và luôn luôn có cùng kích thước ở trên sẽ làm việc cho bạn.

1

Nếu đó là dịch vụ web chứ không phải gọi RestAPI, bạn có thể lấy tệp WSDL từ máy chủ và sử dụng trình tạo SOAP Stub để thực hiện tất cả công việc tạo đối tượng Yêu cầu và mã mạng cho bạn, ví dụ WSClient ++

Nếu bạn muốn làm điều đó một mình thì mọi thứ trở nên khó khăn một chút. Android không đi kèm với thư viện SOAP. Tuy nhiên, bạn có thể tải về thư viện của bên thứ 3 ở đây: http://code.google.com/p/ksoap2-android/

Nếu bạn cần giúp đỡ sử dụng nó, bạn có thể thấy chủ đề này hữu ích: How to call a .NET Webservice from Android using KSOAP2?

Nếu nó là một cuộc gọi REST API như POST hoặc GET để cụ thể hơn sau đó nó rất đơn giản Chỉ cần vượt qua một đối tượng String được định dạng JSON trong hàm bạn và sử dụng gói org.json để phân tích chuỗi phản hồi cho bạn.

Hy vọng điều này sẽ hữu ích.

+0

bài tuyệt vời nó giúp tôi –

Các vấn đề liên quan