Retrofit網(wǎng)絡(luò)請求參數(shù)注解Json格式和form-data格式提交數(shù)據(jù)(實(shí)用)

Retrofit 以Json格式提交數(shù)據(jù) (模擬登錄功能)

1贸人、ApiService

/**
* 登錄
*/
@Headers("Content-Type:application/json")
@POST("user/login")
Observable<ResponseBody> login(@Body RequestBody requestBody);

2尘颓、創(chuàng)建一個Bean類

public class UserBean {
private String nickname;
private String password;
public UserBean(String nickname, String password) {
this.nickname = nickname;
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

3疯趟、將Bean類通過Gson轉(zhuǎn)為json體

Gson gson = new Gson();
HashMap<String, String> map = new HashMap<>();
map.put("nickname", "123456");
map.put("password, "abcdefg");
String jsonBody = gson.toJson(map);
// 此時的jsonBody打印出來的結(jié)果
// {"password":"abcdefg","nickname":"123456"}

4、Retrofit請求頭是否攜帶 如果請求帶請求頭 用方法一锡溯,如果不帶請求頭 用方法二赶舆,請求頭需要添加的數(shù)據(jù)根據(jù)需求自行添加

1、不帶請求頭
private void useRetrofit(String url) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
apiServices = retrofit.create(ApiService.class);
}
2祭饭、帶請求頭
private void useHeaderRetrofit(String url) {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.addHeader("Content-Type", "application/json;charset=utf-8")
.build();
return chain.proceed(request);
}
});
OkHttpClient client = builder.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)
.build();
apiServices = retrofit.create(ApiService.class);
}

5芜茵、網(wǎng)絡(luò)請求的代碼

RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), requestBody);
Observable<ResponseBody> responseBodyObservable = apiServices.login(body);
responseBodyObservable.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.d("TAG", "e:" + e);
}
@Override
public void onNext(ResponseBody responseBody) {
try {
String string = responseBody.string();
Log.d("TAG", string);
callBack.onSuccess((T) string);
} catch (IOException e) {
e.printStackTrace();
}
}
});

Retrofit 以form-data格式提交數(shù)據(jù) (模擬登錄功能)

1、ApiService

1倡蝙、當(dāng)數(shù)據(jù)量大的情況下用方法1 推薦此方法 處理數(shù)據(jù)時方便一些
/**
* 登錄
/
@Multipart
@POST("users/login")
Observable<ResponseBody> phoneLogin(@PartMap Map<String, RequestBody> requestBodyMap);
2九串、當(dāng)數(shù)據(jù)量小的情況下用方法2
/
*
* 登錄
*/
@Multipart
@POST("users/login")
Call<JsonObject> phoneLogin(@Part("nickname") RequestBody username, @Part("password") RequestBody password);

2、轉(zhuǎn)為form-data

/**
* 轉(zhuǎn)換為 form-data
*
* @param requestDataMap
* @return
*/
public static Map<String, RequestBody> generateRequestBody(Map<String, String> requestDataMap) {
Map<String, RequestBody> requestBodyMap = new HashMap<>();
for (String key : requestDataMap.keySet()) {
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"),
requestDataMap.get(key) == null ? "" : requestDataMap.get(key));
requestBodyMap.put(key, requestBody);
}
return requestBodyMap;
}

3寺鸥、Retrofit請求頭是否攜帶 如果請求帶請求頭 用方法一猪钮,如果不帶請求頭 用方法二

1、不帶請求頭
private void useRetrofit(String url) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
apiServices = retrofit.create(ApiService.class);
}
2胆建、帶請求頭
private void useHeaderRetrofit(String url) {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.addHeader("Content-Type", "application/json;charset=utf-8")
.build();
return chain.proceed(request);
}
});
OkHttpClient client = builder.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(client)
.build();
apiServices = retrofit.create(ApiService.class);
}

4烤低、網(wǎng)絡(luò)請求的代碼

Map<String, String> formMaildata = new HashMap<>();
formMaildata.put("nickname", "123456");
formMaildata.put("password", "abcdef");
Map<String, RequestBody> stringRequestBodyMap = generateRequestBody(formMaildata);
//此時stringRequestBodyMap打印出來的結(jié)果
//{password=abcdef, nickname=123456}
Observable<ResponseBody> responseBodyObservable = apiServices.login(stringRequestBodyMap);
responseBodyObservable.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.d("TAG", "e:" + e);
}
@Override
public void onNext(ResponseBody responseBody) {
try {
String string = responseBody.string();
Log.d("TAG", string);
// callBack.onSuccess((T) string);
} catch (IOException e) {
e.printStackTrace();
}
}
});

我總結(jié)的不是很全,這位博主介紹的十分詳細(xì)笆载;超級實(shí)用

https://blog.csdn.net/guohaosir/article/details/78942485

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扑馁,一起剝皮案震驚了整個濱河市涯呻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腻要,老刑警劉巖复罐,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雄家,居然都是意外死亡市栗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門咳短,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛛淋,你說我怎么就攤上這事咙好。” “怎么了褐荷?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵勾效,是天一觀的道長。 經(jīng)常有香客問我叛甫,道長层宫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任其监,我火速辦了婚禮萌腿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抖苦。我一直安慰自己毁菱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布锌历。 她就那樣靜靜地躺著贮庞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪究西。 梳的紋絲不亂的頭發(fā)上窗慎,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音卤材,去河邊找鬼遮斥。 笑死,一個胖子當(dāng)著我的面吹牛商膊,可吹牛的內(nèi)容都是我干的伏伐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼晕拆,長吁一口氣:“原來是場噩夢啊……” “哼藐翎!你這毒婦竟也來了材蹬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤吝镣,失蹤者是張志新(化名)和其女友劉穎堤器,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體末贾,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闸溃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拱撵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辉川。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拴测,靈堂內(nèi)的尸體忽然破棺而出乓旗,到底是詐尸還是另有隱情,我是刑警寧澤集索,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布屿愚,位于F島的核電站,受9級特大地震影響务荆,放射性物質(zhì)發(fā)生泄漏妆距。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一函匕、第九天 我趴在偏房一處隱蔽的房頂上張望娱据。 院中可真熱鬧,春花似錦盅惜、人聲如沸吸耿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咽安。三九已至,卻和暖如春蓬推,著一層夾襖步出監(jiān)牢的瞬間妆棒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工沸伏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糕珊,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓毅糟,卻偏偏與公主長得像红选,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子姆另,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容