1
我正在使用Retrofit向服務器發送POST請求。 POST 的主體必須採用jdata={"key1":"value1",...}
以及Content-Type標頭設置爲application/x-www-form-urlencoded
。我發現一個similar的問題,但接受的答案是行不通的。Retrofit POST原始字符串正文
這裏就是我想 -
我的界面
public interface APIHandler {
@Headers("Content-Type: application/x-www-form-urlencoded")
@FormUrlEncoded
@POST(URL)
Call<ResponseBody> getdata(@Field("jdata") String jdata);
}
呼叫功能
public void load() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("BASE_URL")
.addConverterFactory(GsonConverterFactory.create())
.build();
// prepare call in Retrofit 2.0
APIHandler iAPI = retrofit.create(APIHandler.class);
String requestBody = "{\"id\":\"value\",\"id1\":\"value2\"}"
Call<ResponseBody> call = iAPI.getData(requestBody);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> c, Response<ResponseBody> response) {
if (response.isSuccess()) {
ResponseBody result = response.body();
String gs = new Gson().toJson(result);
Log.d("MainActivity", "response = " + gs + " status: " + statusCode);
} else {
Log.w("myApp", "Failed");
}
}
@Override
public void onFailure(Call<ResponseBody> c, Throwable t) {
}
});
}
但我收到response = null
和status = 200
。我究竟做錯了什麼?預期的響應只是一個字符串而不是JSON數組。
這個'{「key1」:「value1」,...}'是一個json數據。你可以使用gson將pojo轉換爲json對象,然後將其發佈到服務器 – Raghunandan
是的,但我需要發佈'jdata = {「key1」:「value1」,...}'不是'{「key1」:「value1 「,...}' – jL4
檢查toString方法@ http://developer.android.com/intl/es/reference/org/json/JSONObject.html – Raghunandan