0
点赞
收藏
分享

微信扫一扫

Retrofit系列文章(一) - Retrofit简介

IT程序员 2021-09-29 阅读 74

前言

Retrofit系列文章
Retrofit系列文章(一) - Retrofit简介
Retrofit系列文章(二) - Retrofit常见问题的解决
Retrofit系列文章(三) - Retrofit源码分析
Retrofit系列文章(四) - 手写Retrofit核心架构部分
拓展 - 应用是怎么来的?

1. 定义

是对 OkHttp 的封装,是网络封装的框架,解耦,采用的是动态代理;

2. 基本用法

1>:创建一个RetrofitClient类:

/**
 * Email: 2185134304@qq.com
 * Created by Novate 2018/6/30 9:08
 * Version 1.0
 * Params:
 * Description:
*/

public class RetrofitClient {
    private static final ServiceApi mServiceApi ;

    static {

        // Builder设计模式
        OkHttpClient okHttpClient = new OkHttpClient() ;
        Retrofit retrofit = new Retrofit.Builder()
                // 访问后台接口的主路径
                .baseUrl("http://192.168.8.169:8080/OkHttpServer/")
                // 添加解析转换工厂,Gson解析、Xml解析
                .addConverterFactory(GsonConverterFactory.create())
                // 添加OkHttpClient,不添加就是默认的光杆 OkHttpClient
                .client(okHttpClient)
                .build() ;



        // 创建一个实例对象,静态代理模式
        mServiceApi = retrofit.create(ServiceApi.class) ;
    }

    public static ServiceApi getServiceApi() {
        return mServiceApi;
    }
}

2>:创建一个请求后台访问数据的 接口类

/**
 * Email: 2185134304@qq.com
 * Created by Novate 2018/6/30 8:56
 * Version 1.0
 * Params:
 * Description:    请求后台访问数据的 接口类
*/

public interface ServiceApi {


    // 登录接口 GET(半路径)
    @GET("LoginServlet")
    Call<UserLoginResult> userLogin(

            // @Query("后台需要解析的字段")
            @Query("userName") String userName ,
            @Query("userPwd") String userPwd) ;




    // 登录接口 GET(半路径)
    /*@GET("LoginServlet")
    Call<Result<UserInfo>> userLogin(

            // @Query("后台需要解析的字段")
            @Query("userName") String userName ,
            @Query("userPwd") String userPwd) ;*/


    // POST
    // 上传文件

}

3>:创建一个 JavaBean对象

/**
 * Email: 2185134304@qq.com
 * Created by Novate 2018/6/30 9:16
 * Version 1.0
 * Params:
 * Description:
*/

public class UserLoginResult{
    public UserInfo data ;


    public class UserInfo{
        public String userName ;
        public String userSex ;

        @Override
        public String toString() {
            return "UserInfo{" +
                    "userName='" + userName + '\'' +
                    ", userPwd='" + userSex + '\'' +
                    '}';
        }
    }
}

4>:在MainActivity中使用:

/**
 * Email: 2185134304@qq.com
 * Created by Novate 2018/6/30 10:51
 * Version 1.0
 * Params:
 * Description:    Retrofit基本使用
*/
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // OkHttp + RxJava + Retrofit

        Call<UserLoginResult> call = RetrofitClient.getServiceApi().userLogin("Novate" , "123456") ;
        call.enqueue(new Callback<UserLoginResult>() {
            @Override
            public void onResponse(Call<UserLoginResult> call, Response<UserLoginResult> response) {
                // 成功
                UserLoginResult loginResult = response.body();
                Log.e("TAG" , loginResult.data.toString()) ;

            }

            @Override
            public void onFailure(Call<UserLoginResult> call, Throwable t) {
                // 失败
            }
        });
    }
}

代码已上传至github:
https://github.com/shuai999/Architect_day33.git

举报

相关推荐

0 条评论