2016-11-05 86 views
0

我是新來的android網絡編程,我想發佈一些JSON格式的數據從android到服務器,並獲得迴應給android客戶端使用相同的HttpURLConnection用於發佈數據。從Android客戶端發佈Json到服務器並獲得回覆

這裏是我的郵編:

public void post() throws IOException { 

    URL url = createEndpointUrl(); 

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

    conn.setRequestMethod(POST); 
    conn.setDoInput(true); 
    conn.setDoOutput(true); 

    String query = createQueryParameters(); 

    OutputStream os = conn.getOutputStream(); 
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 

    writer.write(query); 
    writer.flush(); 
    writer.close(); 

    // Here i want to get operation 
    // result (response) from server 
    . 
    . 
    . 
    // 
    os.close(); 

    conn.disconnect(); 
} 

回答

2

獲得響應:

BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
String decodedString; 
StringBuilder stringBuilder = new StringBuilder(); 
while ((decodedString = in.readLine()) != null) { 
     stringBuilder.append(decodedString); 
} 
in.close(); 
/*YOUR RESPONSE */ 
String response = stringBuilder.toString(); 
+0

我只是好奇,客戶端將等待如果服務器執行繁重的工作,獲取響應 – saber

+0

@saber是的,你必須展示某種進步。你可以使用AsyncTask。 –

1

試試下面

public void post() throws IOException { 

URL url = createEndpointUrl(); 

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

conn.setRequestMethod(POST); 
conn.setDoInput(true); 
conn.setDoOutput(true); 

String query = createQueryParameters(); 

OutputStream os = conn.getOutputStream(); 
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 

writer.write(query); 
writer.flush(); 
writer.close(); 

// Here i want to get operation 
// result (response) from server 
. 
. 
. 
// 
os.close(); 
try { 
int responseCode = conn.getResponseCode();// error code 
String response = ""; // response 
BufferedReader br = new BufferedReader(new   
InputStreamReader(conn.getInputStream())); 
       while ((line = br.readLine()) != null) { 
        response += line; 
       } 
br.close(); 
}catch(Exception e){ 
// handle error 
} 
conn.disconnect(); 
} 
+0

感謝您的回覆,如果服務器操作繁重,該怎麼辦?那麼,在這種情況下,客戶端等待服務器響應? – saber

+0

首先設置連接和服務器超時。而這個任務在單獨的線程或者asynctask(doInBackground方法)中。 – Sush

相關問題