Android开发经验谈Android开发

Retrofit2简单使用

2019-08-20  本文已影响4人  AOCCG

以前一直用OkHttp网络框架,最近换Retrofit2,顺便整理笔记

整理分为7步:

1.导入开源库(Retrofit、OkHttp,数据解析器集成)

    //Retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.1.0'
    //okhttp
    implementation 'com.squareup.okhttp3:okhttp:3.4.1'
    //数据解析器集成(gson)
    implementation 'com.squareup.retrofit2:converter-gson:2.1.0'

2.创建接口设置请求类型与参数

3.创建Retrofit对象、设置数据解析器

4.生成接口对象

5.调用接口方法返回call对象

6.发送请求(同步、异步)

    * 同步:调用Call对象的execute(),返回结果的响应体
    * 异步:调用call对象的enqueue(),参数是一个回调

7.处理返回的数据

get请求完整代码(带实体解析数据版)

请求代码:

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://suggest.taobao.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        DataService dataService = retrofit.create(DataService.class);
        Call<DataMode> call =dataService.suggest("utf-8","衣服");
        call.enqueue(new Callback<DataMode>() {
            @Override
            public void onResponse(Call<DataMode> call, Response<DataMode> response) {
                LogUtils.d("成功",response.body().getResult());
            }
            @Override
            public void onFailure(Call<DataMode> call, Throwable t) {
                LogUtils.d("失败",t);

            }
        });

DataService代码:

public interface DataService {
    //https://suggest.taobao.com/sug?code=utf-8&q=关键字
    @GET("sug")
    Call<DataMode> suggest(@Query("code") String code, @Query("q") String q);
}

DataMode代码:

public class DataMode {
    private List<List<String>> result;
    public List<List<String>> getResult() {
        return result;
    }
    public void setResult(List<List<String>> result) {
        this.result = result;
    }
}

get完整代码(设置请求头、通用请求不带实体解析数据)

//设置请求头方法1,这里使用OKHTTP添加请求头方法
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public okhttp3.Response intercept(Chain chain) throws IOException {
                        Request original = chain.request();
                        Request request = original.newBuilder()
                                .header("User-Agent", "Your-App-Name")
                                .header("Accept", "application/vnd.yourapi.v1.full+json")
                                .method(original.method(), original.body())
                                .build();
                        return chain.proceed(request);
                    }
                }).retryOnConnectionFailure(true)
                .build();
//把client设置给retrofit ,这样就完成添加请求头
        Retrofit retrofit = new Retrofit.Builder()
                .client(client)
                .baseUrl("https://suggest.taobao.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        DataService dataService = retrofit.create(DataService.class);
        Call<ResponseBody> call =dataService.suggest("utf-8","衣服");
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    final byte[] stringsrc=response.body().bytes();
                    String resutf8=new String(stringsrc,"utf-8");
                    LogUtils.d("成功",resutf8);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                LogUtils.d("失败",t);

            }
        });

DataService代码:

public interface DataService {
    //设置请求头方法1,添加多个Header参数
    @Headers({
            "Accept: application/vnd.yourapi.v1.full+json",
            "User-Agent: Your-App-Name"
    })
    @GET("sug")
//设置请求头方法1,使用注解的方式,但是Header参数每次提交的都不同,也就是动态的Header
    Call<ResponseBody> suggest(@Header("Content-Range") String contentRange, @Query("code") String code, @Query("q") String q);
}

POST请求代码(只修改DataService)

public interface DataService {
   @Headers({
           "Accept: application/vnd.yourapi.v1.full+json",
           "User-Agent: Your-App-Name"
   })
   @FormUrlEncoded
   @POST("sug")
   Call<ResponseBody> suggest(@Field("code") String code, @Field("q") String q);
}
上一篇 下一篇

猜你喜欢

热点阅读