美文网首页Android
Retrofit网络库

Retrofit网络库

作者: 12313凯皇 | 来源:发表于2018-12-31 21:52 被阅读23次

    网课链接

    一、Retrofit介绍

    简介:
    • Retrofit是Square公司基于RESTful风格推出的网络框架封装
    • Retrofit与OKHttp的关系:
       Retrofit是基于OKHttp的网络请求的二次封装,其本质仍是OKHttp
    • Retrofit库包结构
    与其它网络库的对比:
    • AndroidAsynHttp
       基于HttpClient,作者已停止维护,Android5.0不再使用HttpClient因此不推荐使用。
    • Volley:
       基于HttpUrlConnection,Google官方推出,只适合轻量级网络交互如数据传输小,不适合大文件上传下载场景。
    Retrofit优点:
    • API设计简洁易用,注解化配置高度解耦、支持多种解析器、支持Rxjava。

    二、Retrofit使用

    Step1:
     Retrofit开源库、OkHttp网络库、数据解析器集成、注册网络权限 。

    • 依赖包导入
        implementation 'com.squareup.retrofit2:retrofit:2.5.0'
        implementation 'com.squareup.okhttp3:okhttp:3.12.0'
        implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    

     maven方式:

        <dependency>
          <groupId>com.squareup.retrofit2</groupId>
          <artifactId>retrofit</artifactId>
          <version>2.4.0</version>
        </dependency>
    
    • 添加网络权限
    <uses-permission android:name="android.permission.INTERNET" />
    

    Step2:
     创建接口设置请求类型与参数。

    //所需解析json对应的类
    public class UserInfoModel {
    
        public String code;  //属性
    
    }
    
    //接口
    public interface UserMgrService {
    
        @GET("login")
        Call<UserInfoModel> login(@Query("username") String username, @Query("pwd") String password);
    
    }
    

    Step3:
     创建Retrofit对象、设置数据解析器。

        //创建Retrofit对象  注意url后面有一个'/'。
        Retrofit retrofit = new Retrofit.Builder().baseUrl("http://localhost:8080/")
                            .addConverterFactory(GsonConverterFactory.create()).build();
    

    Step4:
     生成接口对象。

        // 获取UserMgrService对象
        UserMgrService userMgrService = retrofit.create(UserMgrService.class);
    

    Step5:
     调用接口方法返回Call对象。

        //调用login
        final Call<UserInfoModel> call = userMgrService.login("admin", "admin");
    
    

    Step6:
     发送请求(同步、异步)。

    • 同步:调用Call对象的execute(),返回结果的响应体
    • 异步:调用Call对象的enqueue(),参数是一个回调
        //同步请求
        Response<UserInfoModel> response = call.execute();  
    
        //异步请求
        call.enqueue(new Callback<UserInfoModel>() {
               @Override
               public void onResponse(Call<UserInfoModel> call, Response<UserInfoModel> response) {
    
               }
    
               @Override
               public void onFailure(Call<UserInfoModel> call, Throwable t) {
    
               }
       });
    

    Step7:
     处理返回数据。

       //发送请求
    
       //同步请求需要开启新线程执行,否则会报错
       new Thread(new Runnable() {
             @Override
             public void run() {
                  Response<UserInfoModel> response = null;
                  try {
                        response = call.execute();
                  } catch (IOException e) {
                        e.printStackTrace();
                  }
                       System.out.println("code:" + response.body().code);
             }
      }).start();
    
    
        //异步请求
        call.enqueue(new Callback<UserInfoModel>() {
               @Override
               public void onResponse(Call<UserInfoModel> call, Response<UserInfoModel> response) {
    
               }
    
               @Override
               public void onFailure(Call<UserInfoModel> call, Throwable t) {
    
               }
       });
    

    Step3-7:

        //创建Retrofit对象  注意url后面有一个'/'。
        Retrofit retrofit = new Retrofit.Builder().baseUrl("http://localhost:8080/")
                        .addConverterFactory(GsonConverterFactory.create()).build();
        // 获取UserMgrService对象
        UserMgrService userMgrService = retrofit.create(UserMgrService.class);
        //调用login
        final Call<UserInfoModel> call = userMgrService.login("admin", "admin");
        //异步请求
        call.enqueue(new Callback<UserInfoModel>() {
               @Override
               public void onResponse(Call<UserInfoModel> call, >Response<UserInfoModel> response) {
    
              }
    
               @Override
               public void onFailure(Call<UserInfoModel> call, Throwable t) {
    
               }
       });
    

    常见参数注解:

        @GET,@POST : 确定请求方式
        @Path : 请求URL的字符替代
        @Query:要传递的参数
        @QueryMap:包含多个@Query注解参数
        @body:添加实体类对象
        @FormUrlEncoded:URL编码
    

    三、总结

    • Retrofit是基于Okhttp网络库的高级封装。
    • 采用纾解、网络请求参数配置更灵活,扩展性更好。
    • RESTful风格的API优先选用Retrofit。

    相关文章

      网友评论

        本文标题:Retrofit网络库

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