新了解的一个用户量大的接口型网络框架,名叫Retrofit,当前使用版本2.0,使用环境Android,开发工具:Android studio;
Retrofit github地址:Retrofit;
第一步,将Retrofit引入到gradle,代码如下:
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包
compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
第二步,编写接口类:
public interface RetrofitService{
/**
* 用户登录
* 纯文字请求
* Call接口回调得到的UserBean实体,在实现方法里进行其他操作
* @param userName 传入用户名,Query括号里的是请求参数名
* @param pass 传入密码, Query括号里的是请求密码参数名
**/
@POST("logo")
Call<UserBean> userLogin(@Query("userName") String userName,
@Query("pass") String pass);
/**
* 提交更新个人头像
* 图文混合提交
* Call回调得到自定义的结果实体类,
* @param map 参数集
**/
@Multipart
@POST("upload_img")
Call<ResultBean> updateMyLogo(@PartMap Map<String ,RequestBody> map);
}
第三步,实现接口类:
public class HttpUtil{
/**
* 设置网络参数,得到接口类
**/
private static RetrofitService getService(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(请求一级路径,如:http://www.baidu.com/)
//增加返回值为String的支持
.addConverterFactory(ScalarsConverterFactory.create())
//增加返回值为Gson的支持(以实体类返回)
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit.create(RetrofitService.class);
}
/**
* 将文字参数值转为RequestBody
**/
public static RequestBody toRequestBody(String value){
RequestBody requestBody = RequestBody.create(MediaType.parse("text/pain"), value);
return requestBody;
}
/**
* 用户登录
* @param userName 用户名
* @param password 密码
**/
public static void userLogin(String userName, String password){
Call<UserBean> call = getService().userLogin(userName, password);
call.enqueue(new Callback<UserBean>() {
@Override
public void onResponse(Call<UserBean> call, Response<UserBean> response) {
//TODO:处理数据
//response.body()的结果是UserBean实体
}
@Override
public void onFailure(Call<UserBean> call, Throwable t) {
//TODO:请求失败
}
});
}
/**
* 更新个人头像
* @param userName 用户名
* @param logo 头像图片文件
**/
public static void updateMyLogo(String userName, File logo){
RequestBody logoBody = RequestBody.create(MediaType.parse("image/png"), logo);
Map<String, RequestBody> map = new HashMap<>();
map.put("userName", toRequestBody(userName));
map.put("logo\";+filename=\""+logo.getName(), logoBody);
Call<ResultBean> call = getService().updateMyLogo(map);
call.enqueue(new Callback<ResultBean>() {
@Override
public void onResponse(Call<ResultBean> call, Response<ResultBean> response) {
//TODO:处理数据
//response.body()的结果是ResultBean实体
}
@Override
public void onFailure(Call<ResultBean> call, Throwable t) {
//TODO:请求失败
}
});
}
}