我对retrofit的使用

  
  
##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"/>
 
二。添加依赖库
依赖gsonretrofit
 
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");
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值