日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Retrofit网络请求参数注解,@Path、@Query、@Post、Body等总结(超级实用)以及以Json格式和form-data格式提交数据

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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格式提交数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。