2012-02-22 12 views
14

Chcę wysłać tekst JSON {} do usługi sieciowej i odczytać odpowiedź. Jak mogę to zrobić z Androida? Jakie są kroki, takie jak utworzenie obiektu żądania, ustawienie nagłówki treści itpJak wysłać obiekt JSON przez żądanie HttpClient z systemem Android?

Mój kod jest tutaj

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

błąd co mam zrobić plz mnie poprawić, ponieważ pokazuje mi złe żądanie błąd ale kiedy I nie odpowiedzieć w plakacie pokazuje mi status udanej 200 oK

+0

Spróbuj ustawić ten typ 'entity.setContentType (" application/json; charset = UTF-8 "); \t \t \t \t entity.setContentEncoding (nowa BasicHeader (HTTP.CONTENT_TYPE, \t \t \t \t \t \t "application/json; charset = UTF-8")); ' – MKJParekh

+0

@Soni Nie jej nie działa dobrze dla mnie, próbowałem, ale pokazuje mi błąd Bad Request –

+0

@Soni jedyny błąd zrobił to nie jestem setHeader podobny do tego w poniższym poście httppost.setHeader ("Content-type", "application/json"); –

Odpowiedz

13

zrobić to z

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

Również new HttpPost() przyjmuje adres URL usługi internetowej jako argument.

+0

Thanku to działa dla mnie –

1

W pętli try catch, zrobiłem to:

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

Możesz dodać nameValurPairs według ile pól masz. Zazwyczaj JSON może stać się naprawdę ogromny, który następnie zasugeruję, żeby go wysłać, a następnie wysłać, ale jeśli twój JSON jest dość mały i zawsze taki sam, powyższy powinien zadziałać.

1

Jeśli jest to usługa sieciowa, a nie wywołanie RestAPI, można pobrać plik WSDL z serwera i użyć generatora skrótów SOAP, aby wykonać całą pracę związaną z tworzeniem obiektów Request i kodu sieciowego dla użytkownika, na przykład WSClient ++

Jeśli chcesz zrobić to sam, sprawy stają się nieco kłopotliwe. Android nie ma biblioteki SOAP. Jednak można pobrać 3rd biblioteki strona tutaj: http://code.google.com/p/ksoap2-android/

Jeśli potrzebujesz pomocy, używając go, możesz znaleźć ten wątek pomocny: How to call a .NET Webservice from Android using KSOAP2?

Jeśli jej REST API połączeń jak POST lub GET być bardziej szczegółowe to jest bardzo proste. Po prostu przekaż obiekt String sformatowany w JSON i użyj pakietu org.json, aby przeanalizować ciąg odpowiedzi.

Mam nadzieję, że to pomoże.

+0

świetny post pomaga mi –

Powiązane problemy