Android Retrofit2 Post请求添加Json类型参数笔记
2017-04-19 19:49
507 查看
Android Retrofit2 Post请求添加Json类型参数笔记
一.添加Header
1.添加单独Header
对于某个API所需要添加Header时,可以直接在Service接口上添加@Headers注解:@Headers({ "Content-Type: application/json;charset=UTF-8", "User-Agent: Retrofit-your-App"}) @GET(ConstantsApi.douban_in_theaters) Observable<MovieTheatersModel> requestTheatersMovies(@Query("city")String city, @Query("count")Integer count, @Query("start")Integer start);
2.添加共同Header
如上,我们可以发现,大部分API「”Content-Type: application/json;charset=UTF-8”」都是Header中必须的,那么我们可以直接添加在拦截器中:new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .client(new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request() .newBuilder() .addHeader("Content-Type", "application/json;charset=UTF-8") .addHeader("header2", "123456") .addHeader("header3", "123456") .addHeader("header4", "123456") .build(); return chain.proceed(request); } }).build();
然后你说直接这样每次都add一个匿名的intercept,令人头大的缩进,也太不软件工程了,那就直接封装一个:
public class MyInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request() .newBuilder() .addHeader("Content-Type", "application/json;charset=UTF-8") .addHeader("header2", "123456") .addHeader("header3", "123456") .addHeader("header4", "123456") .build(); return chain.proceed(request); } }
每次请求需要这些header的时候只需要:
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); MyInterceptor myInterceptor = new MyInterceptor(); OkHttpClient client = new OkHttpClient() .newBuilder() .addInterceptor(httpLoggingInterceptor) .addInterceptor(myInterceptor) .build();//添加自定义Interceptor movieService = new Retrofit.Builder() //配合Retrofit .baseUrl(ConstantsApi.BASE_DOUBAN) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(client) .build() .create(DoubanMovieService.class);
二.添加Json类型Body
假定需求Json格式如下:{ "param1": "111", "param2": "222", "data": { "param3": "string", "param4": "string2" } }
1.创建JsonObject对象
JSONObject root = new JSONObject(); JSONObject requestData = new JSONObject(); try { requestData.put("param3", "string"); requestData.put("param4", "string2"); root.put("param1", "111"); root.put("param2", "222"); root.put("data", requestData); } catch (JSONException e) { e.printStackTrace(); }
2.API 接口设置
@POST("api/data?") Observable<PromotionModel> getResult(@Body RequestBody requestBody);
3.联网请求(包含上述1中代码)
JSONObject root = new JSONObject(); JSONObject requestData = new JSONObject(); try { requestData.put("param3", "string"); requestData.put("param4", "string2"); root.put("param1", "111"); root.put("param2", "222"); root.put("data", requestData); } catch (JSONException e) { e.printStackTrace(); } RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),root.toString()); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor()) .addInterceptor(logging) .build(); service = new Retrofit.Builder() .client(client) .baseUrl(Constants.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build() .create(Service.class); return service.getResult(requestBody);
相关文章推荐
- Android HttpURLconnection使用POST请求参数是json
- android设置post请求服务器时参数的设置以及JSON参数的设置
- Android中利用HttpURLConnection发送Post请求并添加参数的写法
- android笔记之--向网络发送GET/POST请求参数
- postman测试post请求参数为json类型
- postman测试post请求参数为json类型
- retrofit sendto failed: ECONNRESET (Connection reset by peer)【android客户端Post请求参数长度限制(参数过大)】解决办法
- android笔记之--向网络发送GET/POST请求参数
- Android post请求网络数据(json作为参数)
- [Android] 解决Volley中JsonObjectRequest的Post请求添加参数的问题
- android笔记之--向网络发送GET/POST请求参数
- Android网络框架-Volley(四) 使用get和post方法发送json请求
- [Android]HttpPost之post请求传递Json数据
- Android Volley网络请求框架 实现post方法并带Map参数上传
- android端和Struts2服务器端通信,交互信息,参数采用JSON,使用了HttpClient与HttpPost类
- Android客户端发送Post/Get请求到Asp.Net服务端一般处理程序Asp.Net进行参数解析
- android webview内的post请求(点击按钮)添加header行不通
- PHP后台2:客户端(IOS/Android)Post请求以及JSON数据编解码
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
- Android中使用Json和Xml与服务器进行通信,使用代码发送Get和Post请求,http请求辅助类