retrofit的使用

1、retrofit的使用

	public interface Api {
    //get请求
    @GET("user")
    Call<ResponseBody> getData();
}
  1. 这是一个没有网络参数的get请求方式,需要在方法头部添加@GET注解,表示采用get方法访问网络请求,括号内的是请求的地址(Url的一部分)
    ,其中返回类型是Call<*>,*表示接收数据的类,如果想直接获取ResponseBody中的内容,可以定义网络请求返回值为Call,ResponseBody是请求网络后返回的原始数据,如果网络请求没有参数,不用写。
  2. 这里特别说明Url的组成(下面会讲解到),retrofit把网络请求的Url分成两部分设置:第一部分在创建Retrofit实例时通过.baseUrl()设置,第二部分在网络接口注解中设置,比如上面接口的"/user",网络请求的完整地址Url
    = Retrofit实例.baseUrl()+网络请求接口注解()。

3、Retrofit中get请求的使用
在build.gradle文件中添加Retrofit依赖库,由于Retrofit已经封装有okhttp所以不需要再添加okhttp的库

implementation 'com.squareup.retrofit2:retrofit:2.5.0'
<uses-permission android:name="android.permission.INTERNET"/>
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'

因为用的是GSON解析方式所以先创建对应服务器返回的数据

public class Data<T> {
    private int status;
    private String msg;
    private T data;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

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

2、创建描述网络接口的类
这是Retrofit将okhttp请求抽象成Java的接口用注解描述和配置网络请求参数,封装Url地址和网络数据请求、

package com.example.networkdemo;
import android.icu.text.IDNA;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface Api {
    //get请求
    @GET("FollowExcellence/Rxjava_Retrofit/master/data1.js")
    Call<Data<ReData>> getJsonData(@Query("id") String id);
}

在方法头部添加@GET注解,表示采用get方法访问网络请求,括号内的是请求的地址(Url的一部分) ,其中返回类型是Call<*>,*表示接收数据的类,Data是上面封装的一个接收数据的统一公共类,添加参数在方法括号内添加@Query,后面是参数类型和参数字段,其实就是键值对的形式。
3、创建Retrofit实例

//构建Retrofit实例
  Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://raw.githubusercontent.com/")
            //设置数据解析器
            .addConverterFactory(GsonConverterFactory.create())
            .build();

通过new Retrofit.Builder().buile()构建Retrofit实例对象,同时设置baseUrl地址,Retrofit把网络请求的URL 分成了两部分设置:
第一部分:在创建Retrofit实例时通过.baseUrl()设置,

.baseUrl("https://raw.githubusercontent.com/")

就是上面的这个地址会和方法请求注解上面的地址拼接在一起,baseUrl地址必须以“/”结尾,否则会报错,
第二部分:在网络请求接口的注解设置,就是在上面的APi接口中用GET注解的字符串:

 @GET("FollowExcellence/Rxjava_Retrofit/master/data1.js")

上面地址拼接后的完整地址为:https://raw.githubusercontent.com/FollowExcellence/Rxjava_Retrofit/master/data1.js,然后通过addConverterFactory设置数据解释器,这里添加的是Gson解释器。这是为了使来自接口的json结果会自动解析成定义好的字段和类型都相符的json对象接受类,在Retrofit 2.0中已经没有Converter,需要自己创建一个Converter, 不然Retrofit只能接收字符串结果,最后需要自己去解析。

4、创建网络请求接口实例

//创建网络请求接口对象实例
Api api = retrofit.create(Api.class);
//对发送请求进行封装
Call<Data<ReData>> dataCall = api.getJsonData("10006");

5、发送网络请求(异步/同步)

//异步请求
dataCall.enqueue(new Callback<Data<Info>>() {
    //请求成功回调
     @Override
     public void onResponse(Call<Data<Info>> call, Response<Data<Info>> response) {
       }
    //请求失败回调
     @Override
     public void onFailure(Call<Data<Info>> call, Throwable t) {         
       }
  });
//同步请求
Response<Data<Info>> data= dataCall.execute();

6、处理返回数据

//异步请求
            dataCall.enqueue(new Callback<Data<ReData>>() {
                @Override
                public void onResponse(Call<Data<ReData>> call, retrofit2.Response<Data<ReData>> response) {
                    //请求成功回调
                    Toast.makeText(MainActivity.this,"回调成功:异步执行",Toast.LENGTH_LONG).show();
                    if (response == null) return;
                    Data<ReData> data = response.body();
                    ReData info = data.getData();
                    textView.setText(info.getId()+"\n"+info.getTitle()+"\n"+info.getUnique()+"\n"+info.getImageId());
                }
                @Override
                public void onFailure(Call<Data<ReData>> call, Throwable t) {
                    //请求失败回调
                    Log.e(TAG, "回调失败:" + t.getMessage() + "," + t.toString());
                    Toast.makeText(MainActivity.this, "回调失败", Toast.LENGTH_SHORT).show();
                }
            });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值