前言
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