public interface UserMgrService{ @GET Call<UserInfoModel> login(@Query("username") String username,@Query String pwd);}

step3:接下去就是调用API下载写入文件了自己项目组织是MVVM,又接收了奥迪Q7XJava和Dagger2,看起来代码写的回顾十分的少,不过没用过的可能看不懂。那这里贴两份代码,意气风发份本人项目中的代码(刚烈推荐这种写法,Retrofit结合TiggoXJava来用不唯有缓慢解决了线程安全题材同一时间特别轻易),生龙活虎份是OKHTTP原始的代码

@QueryMap

一旦Query参数超级多,那么能够因而@QueryMap形式将具有的参数集成在一个Map统一传递。

public interface BlueService {
    @GET("book/search")
    Call<BookSearchResponse> getSearchBooks(@QueryMap Map<String, String> options);
}

编纂实体类

我们得以用JSON字符串调换来Java实体类(POJOState of Qatar这几个网址将Json转为实体类,经过改造的实体类如下:

IpModel.java:

public class IpModel {
    private int code;
    private IpData data;
    public void setCode(int code) {
        this.code = code;
    }
    public int getCode() {
        return this.code;
    }
    public void setData(IpData data) {
        this.data = data;
    }
    public IpData getData() {
        return this.data;
    }
}

IpData.java:

public class IpData {
    private String country;
    private String country_id;
    private String area;
    private String area_id;
    private String region;
    private String region_id;
    private String city;
    private String city_id;
    private String county;
    private String county_id;
    private String isp;
    private String isp_id;
    private String ip;
    public void setCountry(String country) {
        this.country = country;
    }
    public String getCountry() {
        return this.country;
    }
    public void setCountry_id(String country_id) {
        this.country_id = country_id;
    }
    ...
 }   

在app文件包下的build.gradle中增添依赖,这里用的是JSON数据拆解深入分析器:

接下去正是调用了:雷同的创造Retrofit对象

用Call央求网络并管理回调

 call.enqueue(new Callback<IpModel>() {
            @Override
            public void onResponse(Call<IpModel> call, Response<IpModel> response) {
               String country= response.body().getData().getCountry();
                Log.i("wangshu","country"+country);
                Toast.makeText(getApplicationContext(),country,Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call<IpModel> call, Throwable t) {

            }
        });

这边是异步乞求网络,回调的Callback是运维在主线程的。获得重返的Response后将回来数据的country字段用Toast展现出来。如若想一同乞请互连网请使用
call.execute(卡塔尔,假若想中断互连网央求则足以运用 call.cancel(卡塔尔(قطر‎。

风姿洒脱体化的代码如下:

public class MainActivity extends AppCompatActivity {
    private Button bt_request;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt_request = (Button) findViewById(R.id.bt_request);
        bt_request.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getIpInformation("59.108.54.37");
            }
        });
    }

    private void getIpInformation(String ip) {
        String url = "http://ip.taobao.com/service/";
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                //增加返回值为String的支持
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        IpService ipService = retrofit.create(IpService.class);
        Call<IpModel>call=ipService.getIpMsg(ip);
        call.enqueue(new Callback<IpModel>() {
            @Override
            public void onResponse(Call<IpModel> call, Response<IpModel> response) {
               String country= response.body().getData().getCountry();
                Log.i("wangshu","country"+country);
                Toast.makeText(getApplicationContext(),country,Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call<IpModel> call, Throwable t) {

            }
        });
    }

@Multipart

@Multipart用来上传文件

public interface FileUploadService {  
    @Multipart
    @POST("upload")
    Call upload(@Part("description") RequestBody description,
                              @Part MultipartBody.Part file);
}

github源码下载

b.异步:调用Call对象enqueue(),参数是四个回调。

正是键值对,Retrofit会把这两个字段一块拼接到接口中,追加到

@Headers

interface SomeService {
 @GET("some/endpoint")
 @Headers("Accept-Encoding: application/json")
 Call<ResponseBody> getCarType();
}

@Headers用来增多底部音信,上边用的是一定尾部,也足以选用动态尾部:

interface SomeService {
 @GET("some/endpoint")
 Call<SomeResponse> someEndpoint(
 @Header("Location") String location);
}

用Call需要网络并拍卖回调

 call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
               String country= response.body().getData().getCountry();
                Log.i("wangshu","country"+country);
                Toast.makeText(getApplicationContext(),country,Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call call, Throwable t) {

            }
        });

此间是异步伏乞网络,回调的Callback是运营在主线程的。获得重返的Response后将回到数据的country字段用Toast展现出来。借使想一同必要网络请使用
call.execute(State of Qatar,如若想中断互联网必要则能够动用 call.cancel()。

完整的代码如下:

public class MainActivity extends AppCompatActivity {
    private Button bt_request;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt_request = (Button) findViewById(R.id.bt_request);
        bt_request.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getIpInformation("59.108.54.37");
            }
        });
    }

    private void getIpInformation(String ip) {
        String url = "http://ip.taobao.com/service/";
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                //增加返回值为String的支持
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        IpService ipService = retrofit.create(IpService.class);
        Callcall=ipService.getIpMsg(ip);
        call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
               String country= response.body().getData().getCountry();
                Log.i("wangshu","country"+country);
                Toast.makeText(getApplicationContext(),country,Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call call, Throwable t) {

            }
        });
    }

step5:生成接口对象

拿出笔记啦(因为繁多都和GET乞请同样,所以那边讲的就概括点)

编制实体类

咱俩得以用JSON字符串调换来Java实体类(POJO卡塔尔本条网址将Json转为实体类,经过纠正的实体类如下:

IpModel.java:

public class IpModel {
    private int code;
    private IpData data;
    public void setCode(int code) {
        this.code = code;
    }
    public int getCode() {
        return this.code;
    }
    public void setData(IpData data) {
        this.data = data;
    }
    public IpData getData() {
        return this.data;
    }
}

IpData.java:

public class IpData {
    private String country;
    private String country_id;
    private String area;
    private String area_id;
    private String region;
    private String region_id;
    private String city;
    private String city_id;
    private String county;
    private String county_id;
    private String isp;
    private String isp_id;
    private String ip;
    public void setCountry(String country) {
        this.country = country;
    }
    public String getCountry() {
        return this.country;
    }
    public void setCountry_id(String country_id) {
        this.country_id = country_id;
    }
    ...
 }   

号令方法

倡议方法除了上文讲到的@GET,还应该有@POST、@PUT、@DELETE、@HEAD、@OPTIONS、@PATCH、@HTTP。当中@HTTP用来替换以上7个,别的的分级对应着分裂的伸手方法,不晓得的请查看Android网络编程(意气风发)HTTP合同原理那大器晚成篇随笔。

那边能够发掘,@GET和@Query搭配使用,@POST和@Field搭配使用。

注解代码 说明
@Headers 添加请求头
@Path 替换路径
@Query 替代参数值,通常是结合get请求的
@FormUrlEncoded 用表单数据提交
@Field 替换参数值,是结合post请求的

连锁文章
Android网络编程(风姿洒脱)HTTP契约原理
Android互联网编制程序(二)HttpClient与HttpUOdysseyLConnection
Android网络编制程序(三)Volley用法全解析
Android网络编制程序(四)从源码深入分析volley
Android互联网编制程序(五)OkHttp2.x用法全分析
Android网络编制程序(六)OkHttp3用法全解析
Android网络编程(七)源码拆解解析OkHttp前篇[恳请网络]
Android互联网编制程序(八)源码深入解析OkHttp后篇[复用连接池]

用Retrofit创设接口文件

 IpService ipService = retrofit.create(IpService.class);
 Callcall=ipService.getIpMsg(ip);

用retrofit创设大家在此以前定义的IpService接口对象,并调用该接口定义的getIpMsg方法拿到Call对象。

概念多少个网络央求的接口,接口函数里要定义URL路径需要参数回来类型。当中,须要运用注解来描述乞求类型和呼吁参数。

step2:完毕贰个下载管理工科具它的功能有多数:写入文件、判别文件类型、总结文件大小…当然最重大的依然用来把下载下来的文件写入本地

3.乞请参数

上文讲了Retrofit访谈网络的基本措施,接下去大家来了然下Retrofit常用的央求参数。

@Query

最近的例子就用了Query用来询问参数。

public interface IpService{
    @GET("getIpInfo.php")
    Call getIpMsg(@Query("ip")String ip);
}

b.与OkHttp的关系:

类型是MVVM的,为下载的Activity创造三个ViewModel来执行下载的耗费时间操作,并在Activity中用Dagger2来注入该ViewModel对象

倡议方法

呼吁方法除了上文讲到的@GET,还或许有@POST、@PUT、@DELETE、@HEAD、@OPTIONS、@PATCH、@HTTP。当中@HTTP用来替换以上7个,别的的独家对应着差异的呼吁方法,不亮堂的请查看Android互联网编制程序(大器晚成)HTTP合同原理这生龙活虎篇作品。

2.用Retrofit异步访谈互联网

{ "code":1, "data":{ "id":10001, "username":"Tom", "email":"888888888@qq.com", "tel":"18088888888" }, "message":"success"}

@Body

@Body与@POST注解一同使用,提供查询核心内容,个中ApiInfo是叁个bean类。

public interface ApiStores {
        @POST("client/shipper/getCarType")
        Call<ResponseBody> getCarType(@Body ApiInfo apiInfo);
    }

@Body

@Body与@POST评释一同利用,提供查询中央内容,在那之中ApiInfo是二个bean类。

public interface ApiStores {
        @POST("client/shipper/getCarType")
        Call getCarType(@Body ApiInfo apiInfo);
    }
Log.i("response","code:"+response.body;//结果为"code:1"
注解代码 请求格式
@GET GET请求
@POST POST请求
@DELETE DELETE请求
@HEAD HEAD请求
@OPTIONS OPTIONS请求
@PATCH PATCH请求

1.选用前希图

老生长谈,先配备build.gradle:

dependencies {
  ...
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:converter-scalars:2.1.0'//ConverterFactory的String依赖包
}

当然别忘了在manifest参与访问网络的权柄:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

此番我们拜访的网站发出了变通,大家用淘宝ip库,里面有访问接口的验证:
1. 伸手接口(GET):
/service/getIpInfo.php?ip=[ip地址字串]

2. 响应音讯:
(json格式的)国家 、省(自治区或直辖市)、市(县)、运转商

3. 赶回数据格式:

{
    “code”: 0,
    ”data”: {
        “ip”: ”210.75.225.254”,
        ”country”: ”\u4e2d\u56fd”,
        ”area”: ”\u534e\u5317”,
        “region”: ”\u5317\u4eac\u5e02”,
        ”city”: ”\u5317\u4eac\u5e02”,
        ”county”: ”“,
        ”isp”: ”\u7535\u4fe1”,
        “country_id”: ”86”,
        ”area_id”: ”100000”,
        ”region_id”: ”110000”,
        ”city_id”: ”110000”,
        “county_id”: ”-1”,
        ”isp_id”: ”100017”
    }
}

内部code的值的含义为,0:成功,1:退步。

@Headers

interface SomeService {
 @GET("some/endpoint")
 @Headers("Accept-Encoding: application/json")
 Call getCarType();
}

@Headers用来增多尾部新闻,上边用的是从来底部,也得以行使动态尾部:

interface SomeService {
 @GET("some/endpoint")
 Call someEndpoint(
 @Header("Location") String location);
}

下边给出官方给的simple demo,便于越来越好的掌握Retrofit的应用手续:

<uses-permission android:name="android.permission.INTERNET"/>

@Query

前面包车型客车例证就用了Query用来询问参数。

public interface IpService{
    @GET("getIpInfo.php")
    Call<IpModel> getIpMsg(@Query("ip")String ip);
}

前言

Retrofit是Square集团开销的黄金时代款针对Android网络央浼的框架,Retrofit2底层基于OkHttp达成的,而OkHttp今后已经获取谷歌官方认同,不通晓OKHttp的请查看本连串的前作。

在上例中,对应的UserMgr瑟维斯接口如下,当发送诉求参数为汤姆和123456时,央求将发送给的UTiggoL为『login?username=汤姆&pwd=123456』,并会回到早先定义的GSON数据:

④@Query简单点来说吧

@Path

@Path用来替换路径。

public interface ApiStores {
    @GET("adat/sk/{cityId}.html")
    Call<ResponseBody> getWeather(@Path("cityId") String cityId);
}

1.施用前考虑

老生长谈,先布署build.gradle:

dependencies {
  ...
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:converter-scalars:2.1.0'//ConverterFactory的String依赖包
}

当然别忘了在manifest参与访谈互连网的权力:

此次大家拜谒的网址发出了转移,大家用淘宝ip库,里面有访问接口的求证:
1. 伸手接口(GET):
/service/getIpInfo.php?ip=[ip地址字串]

2. 响应新闻:
(json格式的)国家 、省(自治区或直辖市)、市(县)、运维商

3. 回到数据格式:

{
    “code”: 0,
    ”data”: {
        “ip”: ”210.75.225.254”,
        ”country”: ”\u4e2d\u56fd”,
        ”area”: ”\u534e\u5317”,
        “region”: ”\u5317\u4eac\u5e02”,
        ”city”: ”\u5317\u4eac\u5e02”,
        ”county”: ”“,
        ”isp”: ”\u7535\u4fe1”,
        “country_id”: ”86”,
        ”area_id”: ”100000”,
        ”region_id”: ”110000”,
        ”city_id”: ”110000”,
        “county_id”: ”-1”,
        ”isp_id”: ”100017”
    }
}

其间code的值的含义为,0:成功,1:败北。

step2:创制采纳服务器重返数据的类

public interface IServiceApi { ···· //PDF文件Retrofit下载 @Streaming @GET Call<ResponseBody> retrofitDownloadFile(@Url String fileUrl); ...}

恳请网络接口

public interface IpService{
    @GET("getIpInfo.php")
    Call<IpModel> getIpMsg(@Query("ip")String ip);
}

Retrofit提供的央求格局讲明有@GET和@POST等,分别代表GET恳求和POST乞请,大家在这里间访谈的分界面是“getIpInfo.php”。参数申明有@PATH和@Query等,@Query正是我们的央浼的键值没有错装置,在此@Query(“ip”卡塔尔(قطر‎代表键,“String
ip”则代表值。

创建Retrofit

   String url = "http://ip.taobao.com/service/";
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                //增加返回值为String的支持
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

这里的baseUrl加上早先@GET(“getIpInfo.php”卡塔尔定义的参数产生全体的伏乞地址;addConverterFactory用于钦命重临的参数数据类型,这里我们扶持String和Gson类型。

  • App应用程序通过Retrofit央浼互联网,实际上是应用Retrofit接口层封装哀告参数、Header、Url等音讯,之后由OkHttp实现后续的央浼操作。
  • 在服务端再次回到数据之后,OkHttp将原始的结果提交Retrofit,Retrofit会依照客户的要求对结果开展剖判。
  • 透过利用多量的设计形式进行功用模块的解耦,使得地点的进度进展得越来越简约和通畅。

上边代码是Retrofit和CR-VXJava结合来利用的,代码看起来相当少行,很简短。最让本身中意的是它的链式结构,逻辑一览无遗,实际不是昔日这种层层推动。

2.用Retrofit异步访谈互连网

@QueryMap

万风姿浪漫Query参数超多,那么能够透过@QueryMap方式将装有的参数集成在一个Map统一传递。

public interface BlueService {
    @GET("book/search")
    Call getSearchBooks(@QueryMap Map options);
}

差不离分成多个步骤:

Retrofit剖析-美貌的解耦套路Android retrofit
注脚@QueryMap和@Body的界别那是大器晚成份很详细的 Retrofit 2.0 使用教程Retrofit
2.0 超能实施,完结大文件断点下载

前言

Retrofit是Square集团开销的意气风发款针对Android互联网诉求的框架,Retrofit2底层基于OkHttp完成的,而OkHttp现在早就获得谷歌(Google卡塔尔(قطر‎官方认同,不掌握OKHttp的请查看本类别的前作。

@Path

@Path用来替换路线。

public interface ApiStores {
    @GET("adat/sk/{cityId}.html")
    Call getWeather(@Path("cityId") String cityId);
}

图片来源于:从结构角度看Retrofit的效果与利益、原理和启发

数据解析器 Gradle依赖
Gson com.squareup.retrofit2:converter-gson:2.0.2
Jackson com.squareup.retrofit2:converter-jackson:2.0.2
Simple XML com.squareup.retrofit2:converter-simplexml:2.0.2
Protobuf com.squareup.retrofit2:converter-protobuf:2.0.2
Moshi com.squareup.retrofit2:converter-moshi:2.0.2
Wire com.squareup.retrofit2:converter-wire:2.0.2
Scalars com.squareup.retrofit2:converter-scalars:2.0.2

@Multipart

@Multipart用来上传文件

public interface FileUploadService {  
    @Multipart
    @POST("upload")
    Call<ResponseBody> upload(@Part("description") RequestBody description,
                              @Part MultipartBody.Part file);
}

github源码下载

参谋资料
Retrofit
2.0文本上传
福睿斯xJava 与 Retrofit
结合的特等奉行
Retrofit2使用初探
android
介绍Retrofit的简单利用
Retrofit框架使用笔记
Retrofit 解析 JSON 数据
用 Retrofit 2 简化 HTTP
请求
Android Retrofit
2.0使用

恳请互联网接口

public interface IpService{
    @GET("getIpInfo.php")
    Call getIpMsg(@Query("ip")String ip);
}

Retrofit提供的倡议形式疏解有@GET和@POST等,分别代表GET央求和POST伏乞,我们在这里访谈的分界面是“getIpInfo.php”。参数阐明有@PATH和@Query等,@Query正是大家的乞求的键值对的安装,在这里地@Query(“ip”卡塔尔(قطر‎代表键,“String
ip”则代表值。

//step3:public interface GitHub { @GET("/repos/{owner}/{repo}/contributors") Call<List<Contributor>> contributors( @Path String owner, @Path String repo); } public static void main(String... args) throws IOException { // step4:Create a very simple REST adapter which points the GitHub API. Retrofit retrofit = new Retrofit.Builder() .baseUrl .addConverterFactory(GsonConverterFactory.create .build(); // step5:Create an instance of our GitHub API interface. GitHub github = retrofit.create(GitHub.class); // step6:Create a call instance for looking up Retrofit contributors. Call<List<Contributor>> call = github.contributors("square", "retrofit"); // step7:Fetch and print a list of the contributors to the library. List<Contributor> contributors = call.execute; //step8: for (Contributor contributor : contributors) { System.out.println(contributor.login + " (" + contributor.contributions + ")"); } }
public class News { // 根据返回数据的格式和数据解析方式(Json、XML等)定义 ...}

创建Retrofit

   String url = "http://ip.taobao.com/service/";
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                //增加返回值为String的支持
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

此间的baseUrl加上在此之前@GET(“getIpInfo.php”State of Qatar定义的参数产生风流倜傥体化的伸手地址;addConverterFactory用于钦定重临的参数数据类型,这里我们支撑String和Gson类型。

3.需要参数

上文讲了Retrofit访问互连网的基本办法,接下去大家来询问下Retrofit常用的号令参数。

step3:成立用于描述互联网央求的接口

public class ElectronicImageSynthesisActivity extends BaseActivity { ... @Inject ElectronicImageSynthesisViewModel mElectronicImageSynthesisViewModel; /** * pdf下载 */ private void pdfDownLoad() { mElectronicImageSynthesisViewModel.retrofitDownloadFile(mPDFDownloadUrl) .map(new Function<ResponseBody, Boolean>() { @Override public Boolean apply(ResponseBody responseBody) throws Exception { return DownLoadManager.writeResponseBodyToDisk(mPDFSavedFile, responseBody); } }).subscribe(new Consumer<Boolean>() { @Override public void accept(Boolean aBoolean) throws Exception { if  { //这一步就是对你下载下来的文件进行你想要的操作了,我这里是展示PDF displayFromFile(mPDFSavedFile); } } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { //onError showToast(throwable.getMessage; } ...}

用Retrofit成立接口文件

 IpService ipService = retrofit.create(IpService.class);
 Call<IpModel>call=ipService.getIpMsg(ip);

用retrofit创制我们事情未发生前定义的IpService接口对象,并调用该接口定义的getIpMsg方法赢得Call对象。

step7:发送网络央求

Retrofit其实大家得以领略为OkHttp的抓实版,它也是三个互联网加载框架。底层是行使OKHttp封装的。正确来讲,互连网诉求的行事精气神儿上是OkHttp实现,而
Retrofit
仅担负互联网央浼接口的包裹。它的八个风味是含有了超多表明,方便简化你的代码量。何况还接济广大的开源库(有名例子:Retrofit
+
大切诺基xJavaState of Qatar。还想说一点题外话,Retrofit和OkHttp(大家同盟社利用的OKGO框架也是包裹人家的OkHttp)都以square公司(前生机勃勃篇小编写的简书小说Dragger也是她们的,笔者擦,真是大佬!)

则附和的实体类UserInfoModel:

实质上用Retrofit下载文件格局与其余央求大概同大器晚成,拿自个儿动用下载PDF的顺序来比如子step1:编写API,试行下载接口功用

step6:调用接口方法再次来到Call对象

意气风发经你的项目是应用POST诉求情势,不管是利用实体类照旧接受HashMap最棒应用@Body表明。纵然你利用QueryMap
或然也不会有哪些难题(PS:这种公共的景色只适用于POST央浼,GET央求不能接收@Body注明,不然会报错),犹如上边我的不合格代码相同,POST必要中央直属机关接使用@QueryMap,即使也能获得接口数据,不过这么写是但是关的。前车可鉴吧~~

compile 'com.squareup.retrofit2:retrofit:2.4.0'compile 'com.squareup.okhttp3:okhttp:3.10.0'compile 'com.squareup.retrofit2:converter-gson:2.4.0'

连带链接地址:

  • Retrofit GitHub地址
  • Retrofit 官方网址地址
  • Retrofit 修复日志
  • OkHttp GitHub地址
  • OkHttp 官方网站地址
.baseUrl("http://apis.baidu.com/txapi/")

常用的数量解析器如图:

恳请后服务器会回来数据,必要凭借重临数据的格式和剖析方法(Json、XML等)来定义实体类Model。

以此有甚用?那句话的效应就是驱动来自接口的json结果会自动剖析成定义好了的字段和种类都切合的json对象选取类。在Retrofit
2.0中,Package 中曾经未有Converter了,所以,你必要和煦成立三个Converter,
不然的话Retrofit只好摄取字符串结果,你也只可以获得黄金时代串字符,剩下的json调换的活还得你和睦来干。所以,假设您想接收json结果并自行调换到深入解析好的选取类,必需本身创造Converter对象,然后选用addConverterFactory把它加多进去!Retrofit扶持各类数额深入分析方法,在动用时在乎要求在Gradle增加依赖:

实例:那是意气风发份很详细的 Retrofit 2.0 使用教程

如上简单理解~~

public interface Interface { @GET Call<Model> getCall(@Query String xxx); // 用@GET声明了URL路径 // 用getCall()接收网络请求数据,并用注解@Query 声明了请求参数 // 该方法会返回一个Retrofit的Call对象,这里声明了这个对象处理的数据类型为自定义Model}
public interface IServiceApi { @POST("/claims/preclaims") Observable<PublicResponseEntity<PreclaimsResponseEntity>> postClaimPreclaims(@Header("Authorization") String authorization, @QueryMap HashMap<String, String> deviceInfo, @Body RequestBody body);}

图片 1

上面包车型地铁代码只涉及到Retrofit下载,就没啥干货能够讲,用法也不会细小略。但是大家能够看看三种写法的界别,先不说链接逻辑和层层推动逻辑上的区分,光这几个代码量和制版就不讨人爱不忍释。所以还是引进我们学习一下瑞鹰XJava,就算入门挺难,不过用熟了您会发掘存好些个欣喜,太棒了~

图片 2

那这样生龙活虎看,@Body和@QueryMap差距不是相当大哈,都能够对数不清参数实行包装传递。话是那样说,可是它俩仍有反差的:@QueryMap证明会把参数拼接到url前边,所以它适用于GET要求;@Body会把参数放到须要体中,所以适用于POST供给。

  • 概述
  • 采纳格局
//@Header@GETCall<User> getUser(@Header("Authorization") String authorization)//@Headers@Headers("Authorization:authorization")@GETCall<User> getUser()

2.选拔办法

baseUrl("http://apis.baidu.com/txapi/")

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图