Retrofit网络请求参数注解,@Path、@Query、@Post、Body等总结(超级实用)以及以Json格式和form-data格式提交数据
生活随笔
收集整理的這篇文章主要介紹了
Retrofit网络请求参数注解,@Path、@Query、@Post、Body等总结(超级实用)以及以Json格式和form-data格式提交数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我總結的不是很全,這位博主介紹的十分詳細;超級實用
https://blog.csdn.net/guohaosir/article/details/78942485
Retrofit 以Json格式提交數據 (模擬登錄功能)
1、ApiService
/*** 登錄*/@Headers("Content-Type:application/json")@POST("user/login")Observable<ResponseBody> login(@Body RequestBody requestBody);2、創建一個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轉為json體
Gson gson = new Gson(); HashMap<String, String> map = new HashMap<>(); map.put("nickname", "123456"); map.put("password, "abcdefg"); String requestBody = gson.toJson(map);// 此時的jsonBody打印出來的結果 // {"password":"abcdefg","nickname":"123456"}4、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() {@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、網絡請求的代碼
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格式提交數據 (模擬登錄功能)
1、ApiService
1、當數據量大的情況下用方法1 推薦此方法 處理數據時方便一些/*** 登錄*/@Multipart@POST("users/login")Observable<ResponseBody> phoneLogin(@PartMap Map<String, RequestBody> requestBodyMap);2、當數據量小的情況下用方法2/*** 登錄*/@Multipart@POST("users/login")Call<JsonObject> phoneLogin(@Part("nickname") RequestBody username, @Part("password") RequestBody password);2、轉為form-data
/*** 轉換為 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() {@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、網絡請求的代碼
Map<String, String> formMaildata = new HashMap<>();formMaildata.put("nickname", "123456");formMaildata.put("password", "abcdef");Map<String, RequestBody> stringRequestBodyMap = generateRequestBody(formMaildata);//此時stringRequestBodyMap打印出來的結果 //{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!
總結
以上是生活随笔為你收集整理的Retrofit网络请求参数注解,@Path、@Query、@Post、Body等总结(超级实用)以及以Json格式和form-data格式提交数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EditText修改光标和背景色(绝对简
- 下一篇: Android Glide 加载圆形图片