2016-09-22 30 views
-1

我需要使用POSTJSON字符串發送到url。 該字符串應該是:使用POST使用HttpURLConnection發送json數據

data={"cmd":"sign_in",....} 

所以在doInBackground,我用這個代碼:

HttpURLConnection connection = null; 

DataOutputStream outputStream = null; 

String json = "{\"cmd\": \"sign_in\",..."; 

try{ 

URL url = new URL("https://...?data="); 

connection = (HttpURLConnection)url.openConnection(); 
connection.setDoInput(true); 
connection.setDoOutput(true); 
connection.setUseCaches(false); 
connection.setRequestProperty("Connection", "Keep-Alive"); 
connection.setRequestProperty("Content-Type","application/json"); 
connection.setRequestProperty("charset", "utf-8"); 
connection.connect(); 
OutputStream os = connection.getOutputStream(); 
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8"); 
osw.write(json); 
osw.flush(); 
osw.close();  
} 

我檢查使用

int serverResponseCode = connection.getResponseCode(); 
String serverResponseMessage = connection.getResponseMessage(); 
if(serverResponseMessage.length()>0) 
return true; 

我的反應,但我沒有收到任何迴應。響應字符串應該是JSON字符串。但我使用length()來查看是否有任何字符串正在返回。 這段代碼應該工作嗎?任何幫助?

+0

所以,你在哪裏發佈的數據作爲_Json_? – Piyush

+0

當你在android之外嘗試它時API是否工作? –

+0

Neeraj,API正在工作。 – Amit

回答

0

您可以使用FormEncodingBuilder這樣

OkHttpClient client = TCY.getmInstance().getOkHttpClient(); 
     client.setConnectTimeout(120, TimeUnit.SECONDS); // connect timeout 
     client.setReadTimeout(120, TimeUnit.SECONDS); // socket timeout 
     // System.setProperty("http.keepAlive", "true"); 
     formBody.add("abc", abc); 
     formBody.add("username", username); 
     formBody.add("password", "password"); 

     RequestBody body = formBody.build(); 
     Request request = new Request.Builder() 
       .url(url) 
       .cacheControl(new CacheControl.Builder() 
         .maxStale(1, TimeUnit.DAYS) 
         .build()) 
       .post(body) 
       /* .header("Connection", " keep-alive")*/ 
       .build(); 
     hit_link = "url= " + url + " params= " + bodyToString(request); 

     try { 
      Response response = client.newCall(request).execute(); 
      if (!response.isSuccessful()) { 
       result = response.toString(); 
       if (result.equals("") || result.equals("null") || result.length() == 0) { 
        // CommonUtilities.showToast(context, "Something went wrong. Try later."); 
       } 
      } else { 

      } 
      result = response.body().string(); 
      /* Headers responseHeaders = response.headers(); 
      for (int i = 0; i < responseHeaders.size(); i++) { 
       Log.e("CallAddr", responseHeaders.name(i) + ": " + responseHeaders.value(i)); 
      }*/ 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return result; 
+0

我強制應該使用HttpURLConnection – Amit

0

在你的代碼試試這個

 URL obj = new URL(this.url);//url assigned on constructor 
     HttpURLConnection httpURLConnection = (HttpURLConnection) obj.openConnection(); 
     httpURLConnection.setRequestMethod("POST"); 
     httpURLConnection.setRequestProperty("Content-Type", "application/json"); 
     httpURLConnection.setConnectTimeout(5000); 
     String urlParameters = this.headerData.toString();//headerdata is json and conveting is to string to send to server. 


     DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 


     int responseCode = httpURLConnection.getResponseCode();//getting response code 

     BufferedReader bufferedReader = null; 
     if (responseCode == 200) { 
      bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream())); 
     } else { 
      bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getErrorStream())); 
     } 
相關問題