我总结的不是很全,这位博主介绍的十分详细;超级实用

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格式提交数据相关推荐

  1. Retrofit 网络请求参数注解@Path @Field @Query 等使用

    请求参数呢大致如下,到个别人的图, 下面就说下这些内容使用 其中 @Path.@Query.@QueryMap 使用 Get 请求 , 加入使用了Post 请求注解使用@Path  一般都会是项目崩溃 ...

  2. Android Flow遇见Retrofit网络请求实践

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/121754941 本文出自[赵彦军的博客] 文章目录 前言 RetrofitFlow ...

  3. Retrofit网络请求框架使用简析——Android网络请求框架(四)

    题记:-- 很累,累到想要放弃,但是放弃之后将会是一无所有,又不能放弃, 唯有坚持,唯有给自忆打气,才能更勇敢的走下去,因为无路可退,只能前行, 时光一去不复返,每一天都不可追回,所以要更珍惜每一存光 ...

  4. retrofit content-length为0_LiveData+Retrofit 网络请求实战

    code小生,一个专注 Android 领域的技术平台公众号回复 Android加入我的安卓技术群 作者:星星y 链接:https://www.jianshu.com/p/34fb6ffaa684 声 ...

  5. MVP框架+Retrofit网络请求

    /----HttpConfig -----/ public class HttpConfig { //https://www.zhaoapi.cn/product/getProducts?pscid= ...

  6. Retrofit网络请求数据的使用

    需要添加的依赖 compile 'com.squareup.retrofit2:retrofit:2.3.0' 需要添加网络权限 <uses-permission android:name=&q ...

  7. retrofit网络请求失败,postman接口请求成功,项目请求失败

    需添加head参数 如: headers.put("Accept-Language", "zh-CN,zh;q=0.8"); headers.put(" ...

  8. Retrofit get请求参数

    第一种可以用Query() @GET(Url.statisticsApi) Call<ResponseBody> statisticsApi(@Header("Authoriza ...

  9. 轻松搞定Retrofit不同网络请求方式的请求参数配置,及常用注解使用

    <一>四种请求方式: GET 向服务器发起数据请求,获取信息.类似于数据库的select操作,只是查询,不会影响资源的内容. POST 向服务器发送数据,该请求会改变数据的种类等资源.类似 ...

最新文章

  1. J2EE(一)——开发简单WEB服务器
  2. nanodet onnx踩坑记录
  3. UVA 10976 - Fractions Again?!
  4. Netty解决粘包和拆包问题的四种方案
  5. 如何使用单例EJB和MBean构建和清除参考数据缓存
  6. java 视图解析器_SpringMVC——视图和视图解析器
  7. java 画多边形_javascript绘制一个多边形
  8. centos使用vnc实现远程访问图形化界面
  9. 一个详细介绍CPU Memory Kernel的博客
  10. Python深度学习笔记(三)二分类模型
  11. 概率论复习笔记(一)随机事件及其概率
  12. Advised,Advisor,Advice,Pointcut
  13. 弘辽科技:淘宝直通车推广无展现?该从何入手?
  14. 罗技k380键盘-数字键上的字符对不上怎么办?
  15. 1072: 青蛙爬井 C语言
  16. nvm安装成功后npm命令'npm' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  17. 什么是继承extends?
  18. Base64实现图片的编码和解码 1
  19. 显卡在计算机系统中的作用,显卡的作用是什么
  20. 虚拟机系统 无网络连接网络连接网络连接服务器,电脑中VMware虚拟机系统网络适配器未成功连接网络的解决方法...

热门文章

  1. linux实验之文件与文件,linux实验报告文件系统与文件管理.doc
  2. 旅游网站的主页代码_山西太原网站SEO优化推广联系电话
  3. linux mysql8配置文件_Linux下 MySQL8安装教程
  4. 自己动手写CPU(2)流水线数据相关问题
  5. 基于FPGA的ADC和DAC设计
  6. Nexys4DDR的DDR2读写操作例程详解
  7. class路径快捷 xml配置_SpringBoot 配置文件详解(告别XML)-class文件
  8. 圆平移后的方程变化_1.1 直角坐标系中的平移变换与伸缩变换
  9. c++怎么保存汉字_“的汉字 ”写作练习
  10. matlab程序生成.dll,matlab 调用fortran生成DLL