Retrofit 学习笔记和简单封装

来源:互联网 发布:淘宝周生生是真的吗 编辑:程序博客网 时间:2024/06/07 16:40

最近Retrofit框架大火,学习并记录一下,并且进行了简单的封装

1.首先定义接口

    public interface LoginServer{        @POST("/123/login")    //@POST很明显是用来标记请求方式的 当然一定有@GET        Call<LoginBean> getString  //要接受返回参数的bean类型 方法名getString可以自定义 只要跟下面调用的地方对应即可                (@Query("username")String username, //通过@Query注解需要的参数                 @Query("pwd")String pwd,                 @QueryMap Map<String,String> map); //通过@QueryMap注解通过Map类型传入参数                     //还有一些其他的注解可以定义参数 比如传入list参数的类型 等等 这里使用这两种方法                    //经过测试 @Query和@QueryMap注解可以同时使用 可以在map中放入一些固定的参数    }


2.获得一个Retrofit实例

        Retrofit retrofit = new Retrofit.Builder()                .baseUrl(ConstantValue.COMMON)  //传入baseUrl                .addConverterFactory(GsonConverterFactory.create())  //加入对gson的支持  如果需要支持rxjava也需要加入 这里先不加                .build();

3.创建一个Call对象

        LoginServer server = retrofit.create(LoginServer .class); //传入刚才定义的接口        Call<UserInfoBean> call = server.getString("username"); //UserInfoBean是要接收参数的bean类型


4.发送异步联网请求

        call.enqueue(new Callback<UserInfoBean>() {            @Override            public void onResponse(Call<UserInfoBean> call, Response<UserInfoBean> response) {                response.body(); //这个方法返回的是得到的UserInfoBean            }            @Override            public void onFailure(Call<UnitBeanTreeBean> call, Throwable t) {                            }        });

retrofit也支持发送同步的请求,这里就不写了,用不到


最近自己简单封装了一个RetrofitBuilder

项目地址:https://github.com/peirato/RetrofitBuilder

使用时 首先 设置baserul 在RetrofitBuilder方法中 这个地方:

        retrofit = new Retrofit.Builder()                .baseUrl("http://www.weather.com.cn") //填入baseUrl                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();

在联网的时候调用就行

        RetrofitBuilder.build()//                .param("city","beijing")   //该请求不需要参数 如果需要参数这么写就行//                .param("day","2.14")                .get("/data/sk/101010100.html", new RetrofitBuilder.CallBack<WertherBean>() {            @Override            public void onSuccess(WertherBean bean) {                tv.setText(bean.getWeatherinfo().toString());            }            @Override            public void onError(String errMsg) {            }            @Override            public void onFailure() {            }        });    }








0 0
原创粉丝点击