1、retrofit 是一个网络模块,它内部是OKhttp的框架,OkHttp在Android5.0源码里面Google官方也开始使用了,它使用注解设置各项参数
他可以使Android的网络同步模块,写的很简洁,稳定,和高效
基础用法网上都有这里讲一个 提交 "对象"
@Headers({"Content-type: application/json"})
@POST("项目相对地址")
public CommonResult upLoadUsers(@Body List<UserInfo> userList);
这里是将 用户对象的集合 作为一个对象提交到服务器 用到的的注解是 @Body
他其实最终还是会将对象转化为json字符串的方式提交
当我我们从网络上获取下来的json 或者我们 提交的 的对象
都会被 Retrofit的自动转化为 对象到json String 或者 json String 到 对象,这个过程 Retrofit的内部使用的是Gson 进行转化的,
当然如果喜欢使用 阿里的 FastJson的同学可以自定义 convert,方式如下:
public class MyConverter implements Converter{
@Override
public Object fromBody(TypedInput body, Type type)
throws ConversionException {
//这里的 typedInput 相应体
//type 就是要转化成的对象 是在定义的Callback的泛型
try {
InputStream ins = body.in(); // in 就是 Socket的 InputStream
BufferedReader reader = new BufferedReader(new InputStreamReader(ins)); //从流里面读取内容
String buff = reader.readLine();//用fastjson 转化为 对象
return JSON.parseObject(buff, type.getClass());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public TypedOutput toBody(final Object arg0) { //这里的arg0就是 要上传的对象
if(arg0 == null){
return null;
}
TypedOutput op = new TypedOutput() {
@Override
public void writeTo(OutputStream out) throws IOException { // out 就是 Socket的 OutputStream
out.write(JSON.toJSONString(arg0).getBytes(), 0, (int)length()); //向流里面写数据
}
@Override
public String mimeType() { //类型
return "String";
}
@Override
public long length() {// 获取要上传的数据的 长度
return JSON.toJSONString(arg0).length();
}
@Override
public String fileName() {
return null;
}
};
return op;
}
}