Retrofit2简单使用

作者: AOCCG | 来源:发表于2019-08-20 17:08 被阅读4次

以前一直用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);
}

相关文章

  • Java Retrofit2使用--自定义转换器

    Java Retrofit2使用--自定义转换器 Retrofit2的基础使用请参考Java Retrofit2使...

  • Retrofit2简单使用

    1. Gradle配置 2. 基本的get请求 我们使用GankApi 来进行测试。如: 获取闲读的主分类 ht...

  • Retrofit2简单使用

    以前一直用OkHttp网络框架,最近换Retrofit2,顺便整理笔记 整理分为7步: 1.导入开源库(Retro...

  • retrofit2.0源码分析

    Android 手把手教你使用Retrofit2 Retrofit2源码分析 总结 这里总结下Retrofit2的...

  • 手摸手一步一步来制作BmobJavaSDK(一)

    引用的技术 Retrofit2 RxJava Lombok 目标 使用简单、高效。尽可能让服务和使用者之间不用产生...

  • Retrofit2

    一、Retrofit2 GitHub:Retrofit2Demo 二、Retrofit2概念 三、使用 四、基本使...

  • Retrofit2.0基本使用

    Android网络编程(九)Retrofit2前篇[基本使用] Android网络编程(十)Retrofit2后篇...

  • Rxjava2与Retrofit2的使用

    首先在学习他们的结合使用前,我们需要简单的学习它们:Rxjava2的简单使用与基本操作符Retrofit2网络框架...

  • Retrofit2简单使用教程

    简介 Retrofit是Square开 发的一个Android和Java的REST客户端库。这个库非常简单并且具有...

  • Retrofit2(1):基本介绍

    Retrofit2是为了Android和Java提供的一个安全的HTTP客户端。默认使用okhttp3 简单使用R...

网友评论

    本文标题:Retrofit2简单使用

    本文链接:https://www.haomeiwen.com/subject/zcbpsctx.html