如何发布JSONObject
请求,如下所示?
{
"pObj": [],
"robj": [
{
"l_index": "1",
"user_id": "111",
"vername": "1",
"fcmtoken": "ghkghkhkh"
}
],
"uobject": [],
"pname": "y6y68uuy7"
}
在Volley中我可以成功发布JSONObject
请求。但是当我在Retrofit中使用它时,我的请求改变如下:
{
"nameValuePairs": {
"pObj": {
"values": []
},
"robj": {
"values": [
{
"nameValuePairs": {
"l_index": "1",
"user_id": "111",
"vername": "1",
"fcmtoken": "ghkghkhkh"
}
}
]
},
"uobject": {
"values": []
},
"pname": "y6y68uuy7"
}
}
我收到服务器端的错误请求。
public interface ApiInterface {
@Headers( "Content-Type: application/json; charset=utf-8")
@POST("re_clientdata")
Call<String> savePost(@Body JSONObject req);
}
public class ApiClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl) {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor).build();
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendPost(jRequest);
}
public void sendPost(JSONObject requestobject) {
Log.e("requestobject",requestobject.toString());
Call<String> call =mAPIService.savePost(requestobject);
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String>callback,Response<String>response) {
String res = response.body();
Log.e("DEMO", "post submitted to API." + response);
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Log.e("DEMO", "Unable to submit post to API.",t);
Log.e("call", String.valueOf(call));
}
});
}
注意:我也尝试使用HashMap
,但会自动添加相同的nameValuePairs
参数。如果我使用Gson JsonObject
,请在序列化中请求转换。所以我不想在服务器方面做任何改变,因为使用Volley可以正常工作。但现在我想使用相同的请求使用Retrofit。
答案 0 :(得分:2)
更改我的APi界面以进行改造
public interface ApiInterface {
@Headers( "Content-Type: application/json; charset=utf-8")
@POST("re_clientdata")
Call<String> savePost(@Body RequestBody req);
}
同时更改此活动代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendPost(jRequest);
}
public void sendPost(JSONObject requestobject) {
Log.e("requestobject",requestobject.toString());
RequestBody myreqbody = null;
try {
myreqbody = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),
(new JSONObject(String.valueOf(requestobject))).toString());
} catch (JSONException e) {
e.printStackTrace();
}
Call<String> call =mAPIService.savePost(myreqbody);
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String>callback,Response<String>response) {
String res = response.body();
Log.e("DEMO", "post submitted to API." + response);
}
@Override
public void onFailure(Call<String> call, Throwable t) {
Log.e("DEMO", "Unable to submit post to API.",t);
Log.e("call", String.valueOf(call));
}
});
}
有关详情,请查看此内容 answer建议 Pratik Vyas 。