2012-12-17 20 views
41

Korzystam z poniższego kodu, aby wysłać żądanie http POST, które wysyła obiekt do usługi WCF. Działa to dobrze, ale co się stanie, jeśli moja usługa WCF będzie wymagać innych parametrów? Jak mogę je wysłać z mojego klienta Android?Wysyłanie żądania HTTP POST JSON z Androida

Jest to kod pisałem do tej pory:

StringBuilder sb = new StringBuilder(); 

String http = "http://android.schoolportal.gr/Service.svc/SaveValues"; 


HttpURLConnection urlConnection=null; 
try { 
    URL url = new URL(http); 
    urlConnection = (HttpURLConnection) url.openConnection(); 
    urlConnection.setDoOutput(true); 
    urlConnection.setRequestMethod("POST"); 
    urlConnection.setUseCaches(false); 
    urlConnection.setConnectTimeout(10000); 
    urlConnection.setReadTimeout(10000); 
    urlConnection.setRequestProperty("Content-Type","application/json"); 

    urlConnection.setRequestProperty("Host", "android.schoolportal.gr"); 
    urlConnection.connect(); 

    //Create JSONObject here 
    JSONObject jsonParam = new JSONObject(); 
    jsonParam.put("ID", "25"); 
    jsonParam.put("description", "Real"); 
    jsonParam.put("enable", "true"); 
    OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream()); 
    out.write(jsonParam.toString()); 
    out.close(); 

    int HttpResult =urlConnection.getResponseCode(); 
    if(HttpResult ==HttpURLConnection.HTTP_OK){ 
     BufferedReader br = new BufferedReader(new InputStreamReader( 
      urlConnection.getInputStream(),"utf-8")); 
     String line = null; 
     while ((line = br.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     br.close(); 

     System.out.println(""+sb.toString()); 

    }else{ 
      System.out.println(urlConnection.getResponseMessage()); 
    } 
} catch (MalformedURLException e) { 

     e.printStackTrace(); 
} 
catch (IOException e) { 

    e.printStackTrace(); 
    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
}finally{ 
    if(urlConnection!=null) 
    urlConnection.disconnect(); 
} 
+0

to łącze. Próbujesz wysłać inne parametry, cios linku da ci demonstrację jak możesz je wysłać po zakodowaniu http://www.xyzws.com/Javafaq/how-to-use-httpurlconnection-post-data-to-web -server/139 –

Odpowiedz

55

parametry umieszczania Korzystanie Post: -

URL url; 
URLConnection urlConn; 
DataOutputStream printout; 
DataInputStream input; 
url = new URL (getCodeBase().toString() + "env.tcgi"); 
urlConn = url.openConnection(); 
urlConn.setDoInput (true); 
urlConn.setDoOutput (true); 
urlConn.setUseCaches (false); 
urlConn.setRequestProperty("Content-Type","application/json"); 
urlConn.setRequestProperty("Host", "android.schoolportal.gr"); 
urlConn.connect(); 
//Create JSONObject here 
JSONObject jsonParam = new JSONObject(); 
jsonParam.put("ID", "25"); 
jsonParam.put("description", "Real"); 
jsonParam.put("enable", "true"); 

Część której brakowało to w poniższym ... czyli następująco ..

// Send POST output. 
printout = new DataOutputStream(urlConn.getOutputStream()); 
printout.writeBytes(URLEncoder.encode(jsonParam.toString(),"UTF-8")); 
printout.flush(); 
printout.close(); 

reszta rzeczy ty mogę to zrobić.

+0

Przepraszam, że przyjąłem twoją odpowiedź, ale teraz, gdy próbuję ją zaimplementować, napotkałem problemy. Gdzie przekazałeś swoje parametry? – Libathos

+0

jsonParam Obiekt służy do wysyłania parametrów. – Harish

+0

ok, ale również chcę wysłać obiekt ... jak mogę to osiągnąć? co oznacza, że ​​muszę wysłać teraz 2 obiekty jsonowe – Libathos

13

spróbować coś takiego ciosu:

SString otherParametersUrServiceNeed = "Company=acompany&Lng=test&MainPeriod=test&UserID=123&CourseDate=8:10:10"; 
String request = "http://android.schoolportal.gr/Service.svc/SaveValues"; 

URL url = new URL(request); 
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setDoOutput(true); 
connection.setDoInput(true); 
connection.setInstanceFollowRedirects(false); 
connection.setRequestMethod("POST"); 
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
connection.setRequestProperty("charset", "utf-8"); 
connection.setRequestProperty("Content-Length", "" + Integer.toString(otherParametersUrServiceNeed.getBytes().length)); 
connection.setUseCaches (false); 

DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
wr.writeBytes(otherParametersUrServiceNeed); 

    JSONObject jsonParam = new JSONObject(); 
jsonParam.put("ID", "25"); 
jsonParam.put("description", "Real"); 
jsonParam.put("enable", "true"); 

wr.writeBytes(jsonParam.toString()); 

wr.flush(); 
wr.close(); 

Referencje:

  1. http://www.xyzws.com/Javafaq/how-to-use-httpurlconnection-post-data-to-web-server/139
  2. Java - sending HTTP parameters via POST method easily
+0

Cóż, zrobiłem to, ale nadal otrzymuję złe żądanie jako odpowiedź serwera. Teraz pozwól mi zapytać, czy zrobiłem wszystko, co jest poprawne: Kiedy ustawiam inny parametr powinienem wstawić parametr 1 lub nazwę moich parametrów? obiekt json jest pierwszym parametrem, więc najpierw piszę ten, a potem piszę o innych parametrach, prawda? – Libathos

+0

Po stronie serwera sekwencja param nie ma znaczenia. Wygląda na to, że umieszczasz json w ładunku ... w tym 'otherParametersUrServiceNeed =" param1 = a & param2 = b & param3 = c ";' wpisz nazwę parametrów, których potrzebujesz serwer to jest tylko przykład. Powinieneś najpierw zidentyfikować parametry, które potrzebujesz serwera na żądanie, dodać te parametry i tam wartości w łańcuchu "String otherParametersUrService", jak pokazuje mój przykład. –

+0

Jeśli nie jest poufny, możesz mi powiedzieć, jakie dodatkowe parametry potrzebuje twój serwer. Tak, że mogę umieścić je w powyższym przykładzie. –

Powiązane problemy