首先咋們先講一下okhttp3的MediaType類型,相信大家都很熟系知染,在這里不做過(guò)多簡(jiǎn)紹
今天我要說(shuō)的是表單提交
Okhttp怎樣使用post向服務(wù)器提交數(shù)組或者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");
這是后臺(tái)需要格式葡秒,要的是集合格式扼褪,安卓上傳不可能上傳List弓熏,不管是那個(gè)框架做最后都要toString(); 這就很難受,怎么辦 百度吧 百度出一大推沒用到廢話.....
最終在一篇csdn上的提問(wèn)里的回答找見了了答案(當(dāng)時(shí)我已經(jīng)放棄了场斑,堅(jiān)持一定能解決漓踢,只是時(shí)間和方向不對(duì),希望對(duì)大家有所幫助)
直接看代碼廢話不多說(shuō)了漏隐,以下是我單獨(dú)封裝上傳list數(shù)組類:
public class MyProjectUtils {
// application/x-www-form-urlencoded 表單提交專用喧半,用于傳送數(shù)組
// 表單傳string[], google Okhttp的發(fā)送,可以說(shuō)沒有這個(gè)解決方法青责,
// 可以把String0 arrayData拼接成一個(gè)字符串薯酝,比如"one,two,three"這種形式:
// addParams(" arraydata[]", putList(arrayData)) 傳到后臺(tái),后臺(tái)會(huì)根據(jù)逗號(hào)自己轉(zhuǎn)化為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 隨便寫的 方便講解)大家可以根據(jù)自己的使用網(wǎng)絡(luò)請(qǐng)求使用
重點(diǎn)參數(shù)后面加上"[]"這個(gè),自己模擬后臺(tái)寫了一個(gè)測(cè)試接口
List<String>stringList=new ArrayList<>();
stringList.add("aaa");
stringList.add("bbb");
stringList.add("ccc");
new Thread(new Runnable() {
@Override
public void run() {
try {
//設(shè)置post參數(shù)
okhttp3.RequestBody requestBody = new okhttp3.FormBody.Builder()
.add("one", "1")
.add("level[]", MyProjectUtils.putList(stringList))
.build();
//構(gòu)建請(qǐng)求
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();
//執(zhí)行獲取返回
okhttp3.Response response = client.newCall(request).execute();
String responseData = response.body().string();
Log.e("sss", responseData + " ==============");
// showResponse(responseData);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();