Retrofit网络请求参数注解,@Path、@Query、@Post、Body等总结(超级实用)以及以Json格式和form-data格式提交数据
生活随笔
收集整理的這篇文章主要介紹了
Retrofit网络请求参数注解,@Path、@Query、@Post、Body等总结(超级实用)以及以Json格式和form-data格式提交数据
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我總結(jié)的不是很全,這位博主介紹的十分詳細(xì);超級(jí)實(shí)用
https://blog.csdn.net/guohaosir/article/details/78942485
Retrofit 以Json格式提交數(shù)據(jù) (模擬登錄功能)
1、ApiService
/*** 登錄*/@Headers("Content-Type:application/json")@POST("user/login")Observable<ResponseBody> login(@Body RequestBody requestBody);2、創(chuàng)建一個(gè)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類通過(guò)Gson轉(zhuǎn)為json體
Gson gson = new Gson(); HashMap<String, String> map = new HashMap<>(); map.put("nickname", "123456"); map.put("password, "abcdefg"); String requestBody = gson.toJson(map);// 此時(shí)的jsonBody打印出來(lái)的結(jié)果 // {"password":"abcdefg","nickname":"123456"}4、Retrofit請(qǐng)求頭是否攜帶? 如果請(qǐng)求帶請(qǐng)求頭 用方法一,如果不帶請(qǐng)求頭 用方法二,請(qǐng)求頭需要添加的數(shù)據(jù)根據(jù)需求自行添加
1、不帶請(qǐng)求頭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、帶請(qǐng)求頭private void useHeaderRetrofit(String url) {OkHttpClient.Builder builder = new OkHttpClient.Builder();builder.addInterceptor(new Interceptor() {@Overridepublic 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ò)請(qǐng)求的代碼
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>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {Log.d("TAG", "e:" + e);}@Overridepublic 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ù)時(shí)方便一些/*** 登錄*/@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請(qǐng)求頭是否攜帶? 如果請(qǐng)求帶請(qǐng)求頭 用方法一,如果不帶請(qǐng)求頭 用方法二
1、不帶請(qǐng)求頭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、帶請(qǐng)求頭private void useHeaderRetrofit(String url) {OkHttpClient.Builder builder = new OkHttpClient.Builder();builder.addInterceptor(new Interceptor() {@Overridepublic 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ò)請(qǐng)求的代碼
Map<String, String> formMaildata = new HashMap<>();formMaildata.put("nickname", "123456");formMaildata.put("password", "abcdef");Map<String, RequestBody> stringRequestBodyMap = generateRequestBody(formMaildata);//此時(shí)stringRequestBodyMap打印出來(lái)的結(jié)果 //{password=abcdef, nickname=123456}Observable<ResponseBody> responseBodyObservable = apiServices.login(stringRequestBodyMap);responseBodyObservable.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Observer<ResponseBody>() {@Overridepublic void onCompleted() {}@Overridepublic void onError(Throwable e) {Log.d("TAG", "e:" + e);}@Overridepublic void onNext(ResponseBody responseBody) {try {String string = responseBody.string();Log.d("TAG", string); // callBack.onSuccess((T) string);} catch (IOException e) {e.printStackTrace();}}});May everyone be happy every day and everything go well!
總結(jié)
以上是生活随笔為你收集整理的Retrofit网络请求参数注解,@Path、@Query、@Post、Body等总结(超级实用)以及以Json格式和form-data格式提交数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EditText修改光标和背景色(绝对简
- 下一篇: Glide加载圆形图片并且带白色边框(绝