Retrofit2简单使用

好处

  • 解耦好
  • 可配置度高
  • 速度快

implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.14.0'

权限

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

要使用Retrofit最好先大体了解下注解:

https://blog.csdn.net/weixin_39821531/article/details/88787749

Retrofit注解

  • 请求方法
注解代码请求格式
@GETGET请求
@POSTPOST请求
@DELETEDELETE请求
@HEADHEAD请求
@OPTIONSOPTIONS请求
@PATCHPATCH请求
  • 请求参数
注解代码说明
@Headers添加请求头
@Path替换路径
@Query替代参数值,通常是结合get请求的
@FormUrlEncoded用表单数据提交
@Field替换参数值,是结合post请求的

网络接口

Retrofit通过接口创建网络请求;

举个淘宝查询IP的例子:

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface GetIpService {
    @GET("service/getIpInfo.php")
    Call<IpResult> getIpInfo(
            @Query("ip") String ip
    );
}

数据类

接口中返回的数据,上例中的IpResult,就是数据类;

这需要根据实际返回的数据来编写;

{
"code":0,
"data":
    {
    "ip":"21.22.11.33",
    "country":"美国",
    "area":"",
    "region":"纽约",
    "city":"纽约",
    "county":"XX",
    "isp":"XX",
    "country_id":"US",
    "area_id":"",
    "region_id":"US_132",
    "city_id":"US_1084",
    "county_id":"xx",
    "isp_id":"xx"
    }
}
  • {}里面的是类;
  • 成员用,隔开;
  • :前是成员名称,:后是成员值;

所以,上面的数据是,一个code成员+一个内部类data;

public class IpResult {
    private String code;
    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
        //省略N多get/set方法
    }
}

创建Retrofit对象

Retrofit retrofit = new Retrofit.Builder()
        .addConverterFactory(GsonConverterFactory.create())
        .baseUrl("http://ip.taobao.com/")
        .build();

用GsonConverterFactory需要引入对应的库

implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

网络接口实例

GetIpService IGetIp = retrofit.create(GetIpService.class);

异步网络请求

Call<IpResult> resultCall = IGetIp.getIpInfo("21.22.11.33");
resultCall.enqueue(new Callback<IpResult>() {
    @Override
    public void onResponse(Call<IpResult> call, Response<IpResult> response) {
        Log.v(TAG, "onResponse");
        IpResult result = response.body();
        if (result != null) {
            Log.v(TAG, "result=" + result.getCode() + ", " + result.getData().getCountry());
        }
    }

    @Override
    public void onFailure(Call<IpResult> call, Throwable t) {
        Log.v(TAG, "onFailure");
    }
});

运行结果:

V/x999x: onFailure

然后结果失败了,有些尴尬;但在网页上确实是好的;

只能尝试另外一个IP地址的接口;

http://ip.tianqiapi.com/?ip=27.193.13.255

修改baseUrl、接口和数据类后,再运行;

V/x999x: onResponse
V/x999x: result2=21.22.11.33, 美国

好像可以了;

注意:

@GET里面没有东西的不能写成@GET()或者@GET,会报错!需要写成@GET("/")!

 

简单说明

淘宝接口;

http://ip.taobao.com/service/getIpInfo.php?ip=21.22.11.33

拼接

baseUrl("http://ip.taobao.com/")

@GET("service/getIpInfo.php")
    Call<IpResult> getIpInfo(
            @Query("ip") String ip
    );

 

键值对可以有很多;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值