com.squareup.okhttp3:okhttp:4.9.
2021-11-27 本文已影响0人
旅途开发者
并没有找到直接上传map参数的方法,常用的post请求如下
OkHttpClient client = new OkHttpClient();
//设置body 但是这里只能传递sting类型的数据
RequestBody body = new FormBody.Builder()
.add("pid","123").build();
Request request = new Request.Builder()
.url("http://xxxxxxxx")
.post(body).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
StringMsgHandle.showToastMsg("获取信息失败",getApplicationContext());
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
String res = response.body().string();
Log.e("TAG", "onResponse: " + res);
//获得json数据
JsonObject jsonObject = new JsonParser().parse(res).getAsJsonObject();
});
上述方法是普通的post请求,涉及到要传递map类型的,需要按照以下方式写
Map<String,Object> priceMap = new HashMap<>();
priceMap.put("fee_ydzf","anyType");
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("hId","1203");;
paramMap.put("payMethods", priceMap);
OkHttpClient client = new OkHttpClient();
//设置json的数据传输格式
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
//整理出来body传递。但是这里有个问题就是 FormBody.create 已经被弃用,可是又没有找到可代替的方法,而且程序能正常运行
RequestBody requestBody = FormBody.create(mediaType, gson.toJson(paramMap));
//发起请求这里还和之前的一样
Request request = new Request.Builder()
.url(UrlString.getOrderInfo)
.post(requestBody).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
StringMsgHandle.showToastMsg("失败!",getApplicationContext());
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
String res = response.body().string();
Log.e("成功返回的数据", "onResponse: " + res);
}
});