添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
买醉的伏特加  ·  Android Retrofit2 ...·  2 小时前    · 
温暖的金鱼  ·  Android Retrofit 2详解 ...·  昨天    · 
果断的甜瓜  ·  Retrofit2.0起步篇 - ...·  3 天前    · 
鼻子大的日记本  ·  Retrofit ...·  3 周前    · 
聪明伶俐的青蛙  ·  NavHostFragment - ...·  1 月前    · 
想旅行的双杠  ·  android ...·  3 月前    · 

对于某个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);
本博客为作者原创,如需转载请注明处处:https://blog.csdn.net/wusj3/article/details/102462499 Retrofit 2定义网络请求是通过注解的方式,所以自然我们这里就用到了@POST注解来提交我们的图片文件的二进制数据,需要注意用@Part MultipartBody.Part注解来定义我们要上传的图片文件,用@Part("attribute"... implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.retrofit2:converter-gson:2.5.0' 加入网络权限 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACC 因为请求的content-type是multipart/form-data,所以接口的注解加上@Multipart,参数也要加上@Part。这个最开始不理解,用成了@FormUrlEncoded,导致一直请求失败。 近期,随着开发的需要,研究了一下网络请求Retrofit的功能,其实就是对okhttp的封装,使用起来很方便,主要是以注解的形式进行请求,下面是我看过一些博客大佬们写过的常用注解, 方法注解,包含@GET、@POST、@PUT、@DELETE、@PATH、@HEAD、@OPTIONS、@HTTP。 标记注解,包含@FormUrlEncoded、@Multipart、@Streaming。 1、什么是retrofit retrofit是现在比较流行的网络请求框架,可以理解为okhttp的加强版,底层封装了Okhttp。准确来说,Retrofit是一个RESTful的http网络请求框架的封装。因为网络请求工作本质上是由okhttp来完成,而Retrofit负责网络请求接口的封装。 本质过... 笔者最近用图灵V2版本,V2跟V1版比起来,很大的区别是网络请求,V1版只需一条网址链接即可请求数据,V2版本则需要以请求参数格式为 jsonpost请求数据,无疑增大了难度 打开图灵官网API V2.0接入文档 文档给我们提供了请求示例和返回示例,看着数据十分复杂,复杂的数据就不必用android原生的json解析方式了,因为很容易出错。这里用谷歌的神器gson以及它的插件GsonFormat... 最近在项目里使用了Retrofit2 + Rxjava框架封装网络请求,照着网上的教程一步步搭建起来,顺利地完成了网络请求模块的工作,同时通过okhttp3提供的logging拦截器打印出的请求与服务器回复日志,也是正常的参数与数据,但不知为何日志显示得很长很详细,如下图(还没截完),通过抓包工具看到的参数key也是很长很详细的key,这就令人疑惑了,究竟是为什么呢? 通过向同事... 示例如下HttpService.javaimportokhttp3.RequestBody;importretrofit2.Call;importretrofit2.http.Body;importretrofit2.http.Headers;importretrofit2.http.POST;public interfaceHttpService {String BASE_URL= "http:... 本文将介绍如何通过retrofit库post一串json格式的数据。首先postjson数据格式如下:{"Id": "string","DeviceId": "string","Name": "string","SumDistance": 0,"RouteNo": "string","SumPoints": 0,"SetupTime": "2016-06-10T13:11:00.766Z","U... 【网络】Retrofit2 POST参数传递和文件上传),post参数post文件,还有文件和参数一起上传。记录过程中所遇到的一些坑。----tjstudy Android开发中的网络框架经过多年的发展,目前比较主流的就是Retrofit了,Retrofit2版本出现也有几年了,为了方便使用,特封装了一些关于Retrofit2的代码,分享给大家。 框架主要包括: Get请求 Post请求 使用效果预览: Retrofit对象 Retrofit框架内部使用的还是OkHttp框架,在实例化的时候可以自定义OkHttpClie...