首先咋们先讲一下okhttp3的MediaType类型,相信大家都很熟系,在这里不做过多简绍
今天我要说的是表单提交
Okhttp怎样使用post向服务器提交数组或者List集合
"application/x-www-form-urlencoded"
//定义提交类型Json
public static final MediaType JSON = MediaType.parse("application/json;charset=utf-8");
//定义提交类型String
public static final MediaType STRING = MediaType.parse("text/x-markdown;charset=utf-8");
//定义提交类型表单
public static final MediaType Form = MediaType.parse("application/x-www-form-urlencoded");
这是后台需要格式,要的是集合格式,安卓上传不可能上传List,不管是那个框架做最后都要toString(); 这就很难受,怎么办 百度吧 百度出一大推没用到废话.....
最终在一篇csdn上的提问里的回答找见了了答案(当时我已经放弃了,坚持一定能解决,只是时间和方向不对,希望对大家有所帮助)
直接看代码废话不多说了,以下是我单独封装上传list数组类:
public class MyProjectUtils {
// application/x-www-form-urlencoded 表单提交专用,用于传送数组
// 表单传string[], google Okhttp的发送,可以说没有这个解决方法,
// 可以把String0 arrayData拼接成一个字符串,比如"one,two,three"这种形式:
// addParams(" arraydata[]", putList(arrayData)) 传到后台,后台会根据逗号自己转化为string[]格式的。
public static String putArrays(String[] arrayData) {
return putList(Arrays.asList(arrayData)) ;
}
public static String putList(List<String> list) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
stringBuilder.append(list.get(i));
if (i < list.size() - 1) {
stringBuilder.append(",");
}
}
return stringBuilder.toString();
}
public static String putIntegerList(List<Integer> check_num_list) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < check_num_list.size(); i++) {
stringBuilder.append(check_num_list.get(i));
if (i < check_num_list.size() - 1) {
stringBuilder.append(",");
}
}
return stringBuilder.toString();
}
}
下面是使用代码(使用的是okhttp3 随便写的 方便讲解)大家可以根据自己的使用网络请求使用
重点参数后面加上"[]"这个,自己模拟后台写了一个测试接口
List<String>stringList=new ArrayList<>();
stringList.add("aaa");
stringList.add("bbb");
stringList.add("ccc");
new Thread(new Runnable() {
@Override
public void run() {
try {
//设置post参数
okhttp3.RequestBody requestBody = new okhttp3.FormBody.Builder()
.add("one", "1")
.add("level[]", MyProjectUtils.putList(stringList))
.build();
//构建请求
OkHttpClient client = new OkHttpClient();
okhttp3.Request request = new okhttp3.Request.Builder()
.url("http://192.168.1.31/ht3/yanshou/video/save.json")
.post(requestBody)
.build();
//执行获取返回
okhttp3.Response response = client.newCall(request).execute();
String responseData = response.body().string();
Log.e("sss", responseData + " ==============");
// showResponse(responseData);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();