##retrofit
一。 http库 --流行 底层默认使用okhttp volley框架
二。关注度十分高
https://github.com/search?utf8=%E2%9C%93&q=android+retrofit
三。Square公司提供的。
##环境搭建
一。网络权限
src/main/AndroidManifest.xml
<!--权限 网络-->
<uses-permission android:name="android.permission.INTERNET"/>
二。添加依赖库
依赖gson与retrofit
build.gradle
dependencies {
compile 'com.squareup.retrofit2:converter-gson:2.0.0'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
三。测试例子
##案例1 get请求获取服务端返回数据
String url="http://192.168.1.114:8080/webapi/get?username=heima&password=123";
//{"msg":"成功收到信息","data":{"username":"heima","password":"123"}}
// Gson gson=new Gson(); Userinfo info=gson.fromJson(json,UserInfo.class);
一。业务接口描述
一。专注业务接口 proxy
public interface UserApi {
// 二。retrofit有些注解 可以给指定访问信息 与访问方式
//1.使用get进行登录 2.访问服务端接口
@GET("get?username=heima&password=123")
Call<LoginResult> login();
}
二。使用注释指定请求信息
@GET("get?username=heima&password=123")
三。创建javaBean类
public class LoginResult {
public String msg;
public UserInfo data;
}
public class UserInfo {
public String username;
public String password;
}
四。初始化retrofit框架
public UserApi getUserApi() {
//四。初始化的retrofit配置 创建业务接口实例
String baseUrl="http://192.168.1.114:8080/webapi/";
Retrofit build = new Retrofit.Builder()//
.baseUrl(baseUrl)//项目路径
.addConverterFactory(GsonConverterFactory.create())//添加工厂的解析类可以解析json
.build();
//创建接口的实现类 与实例
return build.create(UserApi.class);
}
五。异步调用网络请求
//Call业务方法的引用 切换业务方法线程 异步 enqueue 同步execute
Call<LoginResult> login = userApi.login();
//选择子线程
//回调对象处理服务端的返回数据
Callback<LoginResult> callback = new Callback<LoginResult>() {
//参1 Response 服务端返回结果包装
@Override
public void onResponse(Call<LoginResult> call, Response<LoginResult> response) {
//正常
//业务逻辑
result.setText(response.body().data.username);
}
@Override
public void onFailure(Call<LoginResult> call, Throwable t) {
//业务逻辑
result.setText("重新加载。。");
}
};
login.enqueue(callback);//参1.回调对象 实现处理代码但是由系统或者其它框架去调用。
##案例1.注意事项
一。baseurl以/结尾 方法上的地址 不以/开头
String baseUrl="http://192.168.1.114:8080/webapi/";
@GET("get?username=heima&password=123")
这样restrofit才能正确理解
http://192.168.1.114:8080/webapi/get?username=heima&password=123
二。访问地址出错或者class找不到
应该这样处理
result.setText(response.body()==null?"null":response.body().data.username);
##url地址上的注解使用
//@Path 替换路径?前面的{变量}
@GET("{method}?username=heima&password=123")
Call<LoginResult> login(@Path("method") String method);
//@Query 替换路径后面访问参数变量
@GET("{method}")
Call<LoginResult> login(@Path("method") String method,@Query("username") String account,@Query("password") String pwd);
//@QueryMap 把几个变量塞到集合中。由retrofit遍历?username='232'&password="123"
@GET("{method}")
Call<LoginResult> login(@Path("method") String method,@QueryMap Map<String,String> params);
}
以下是对业务接口的调用传参
//Call业务方法的引用 切换业务方法线程 异步 enqueue 同步execute
// Call<LoginResult> login = userApi.login();//无参
// Call<LoginResult> login = userApi.login("get");
// Call<LoginResult> login = userApi.login("get","heihei","321");
Map<String, String> params = new HashMap<>();
params.put("username", "baba");
params.put("password", "3333");
Call<LoginResult> login = userApi.login("get", params);
##案例2Post请求
@FormUrlEncoded
@POST("post")
Call<LoginSuccessInfo> postLogin(@Field("username")String username,@Field("password")String pwd);
// @POST使用post请求服务端
// @FormUrlEncoded对请求参数进行表单编码
// @Field服务端接收变量的名称
//Call业务方法的引用 切换业务方法线程 异步 enqueue 同步execute
Call<LoginSuccessInfo> postLogin = userApi.postLogin("itheimapost", "33333");
我对retrofit的使用
最新推荐文章于 2021-07-22 11:04:35 发布