Retrofit 使用心得

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;
        }
        
    }

你可能感兴趣的:(html,android,框架,网络)