2016-07-18 27 views
1

我無法從頂端找出JSON從代碼名一個API放置請求。我沒有找到任何示例來提出此請​​求。如何通過代碼名一個API製作JSON PUT請求

問題: 1.我不確定是否必須發送內容長度參數。如果是,我該如何發送? 2.我必須發送只有「真」沒有別的請求正文。沒有關鍵和值使用req.addArgument()方法。 3.我是否必須使用buildRequestBody()方法來覆蓋請求。你能提供一個例子嗎? 4.如何在收到迴應後驗證結果。

任何幫助,可以讚賞。 謝謝。

請找到下面的代碼。

req.setUrl(identityUrl); 
req.setPost(false); 
req.setHttpMethod("PUT");    
req.setContentType("application/json"); 
req.addRequestHeader("authorization", token); 
req.addArgument("Content-Length", "4"); 
req.setReadResponseForErrors(true); 
InfiniteProgress ip = new InfiniteProgress(); 
Dialog d = ip.showInifiniteBlocking(); 
NetworkManager.getInstance().addToQueueAndWait(req); 
d.dispose(); 
JSONParser parser = new JSONParser(); 
Map map2 = null; 
try { 
map2 = parser.parseJSON(new InputStreamReader(new ByteArrayInputStream(req.getResponseData()), "UTF-8")); 
} catch (IOException ex) { 
     ex.printStackTrace(); 
} 

回答

0

如果你想要的內容被完全嵌入你需要重寫buildRequestBody方法。請注意,帖子需要是真實的被調用的身體。

我不認爲你需要content-length

req = new ConnectionRequest(identityUrl) { 
    protected void buildRequestBody(OutputStream os) throws IOException { 
     os.write(json.getBytes("UTF-8")); 
    } 

    protected void readResponse(InputStream input) throws IOException { 
     map2 = parser.parseJSON(new InputStreamReader(input, "UTF-8")); 
    } 

    protected void postResponse() { 
     // response completed, this is called on the EDT do the application logic here... 
    } 
}; 
req.setPost(true); 
req.setHttpMethod("PUT");    
req.setContentType("application/json"); 
req.addRequestHeader("authorization", token); 
req.setReadResponseForErrors(true); 
InfiniteProgress ip = new InfiniteProgress(); 
Dialog d = ip.showInifiniteBlocking(); 
req.setDisposeOnCompletion(d); 
NetworkManager.getInstance().addToQueue(req); 

請注意,我不再需要關閉流或處理IOException作爲連接請求做了我的一切。另請注意,讀/構建方法在網絡線程上調用,而不在EDT上,因此您需要執行postResponse中的其餘流程。

+0

僅供參考如果問題是正確/有幫助upvote並檢查旁邊的複選框接受它。這將爲您提供在堆棧溢出社區內提供額外特權的點數。 –