2014-09-26 55 views
4

我正在使用Android的loopj的AsyncHttpClient,以便我可以與我創建的寧靜的Web應用程序進行交互。我使用Postman測試了一個POST請求,它工作正常。爲Rest客戶端設置Json內容類型

然而,在Android中,我努力做一個POST請求但作爲內容型總是被設置爲text/html ..

RequestParams params = new RequestParams(); 
    params.setUseJsonStreamer(true); 
    params.put("email", "[email protected]"); 
    StringEntity se = null; 
    try { 
     se = new StringEntity(params.toString()); 
     se.setContentType("application/json"); 
    } catch (UnsupportedEncodingException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    Header headers[] = {}; 
    if(getActivity() != null){ 
    RestClient.postWithContentType(getActivity(), "contacts", se, "application/json", new AsyncHttpResponseHandler() { 
     //onSuccess and onFailure methods ommitted 

    }); 

它不斷失敗,而我得到的logcat此消息: 傳遞的contentType將被忽略,因爲HttpEntity設置內容類型。

所以,我試圖改變這一狀況,

public static void postWithContentType(Context context,String url,StringEntity s,String contentType, AsyncHttpResponseHandler responseHandler){ 
     s.setContentType("application/json"); 
     client.post(context, getAbsoluteUrl(url), s, contentType, responseHandler); 
    } 

但我仍然得到同樣的消息,這真是令人沮喪,我一直在試圖弄明白了好半天! 如果任何人有任何關於如何設置內容類型的想法 - 將不勝感激,謝謝!

+0

RestClient究竟是什麼?你還沒有說過這些。也許它的實施會弄亂某些東西? – 0101100101 2014-09-26 14:49:32

+0

你解決了這個問題嗎? – playmaker420 2014-11-10 11:36:34

回答

1
RequestParams requestParams = new RequestParams(); 
asyncHttpClient.addHeader("Accept", "text/json"); 
asyncHttpClient.addHeader("content-type", "application/json"); 
asyncHttpClient.post(context, getAbsoluteUrl(url), requestParams, new AsyncHttpResponseHandler() { 
    @Override 
    public void onSuccess(int statusCode, String content) { 
     super.onSuccess(content 
     // Ur logic 
    } 

    @Override 
    public void onFailure(Throwable error, String content) { 
     super.onFailure(error, content); 
     // Ur logic 
    } 
}); 
2

我有同樣的問題。

我不明白哪一個會影響它,因爲它在幾天前真的有效。我只是再次手動添加標題,它的工作原理。

只需在RestClient.postWithContentType(...)之上加RestClient.addHeader("Content-Type", "application/json");即可。

相關問題