retrofit使用随记

 

1.请求接口

public interface RetrofitApi {
    /*注册*/
    /*登录*/
    @FormUrlEncoded    //post请求带这个
    @POST("url")
    Call<User> login(@Field("json") JSONObject jsonObject);
     //因为我是使用的jsonobject所以使用@Filed,其他的参照网上的例子,google
     //还有填写字段的方式,这是封装json
    /*Web*/
    @GET("url")
    Call<ResponseBody> getWebData();
    //String返回类型用ResponseBody

    /*注解url*/
    @GET
    Call<ResponseBody> getInfo(@Url String url);
   @Headers("Authorization:APPCODE "+AppUrl.ALI_API_APPCODE)
    @GET(AppUrl.ZIPCODE_PATH)
    Observable<ZipCodeBean> getZipCode(@Query("address") String address, @Query("areaid") String areaid);

    @Headers("Authorization:APPCODE "+AppUrl.ALI_API_APPCODE)
    @GET(AppUrl.ZIPCODE_GET+"?zipcode={zipcode}")
    Observable<ZipCodeBean> getZipCodePath(@Path("zipcode") String zipcode);
//测试
    @Headers("Authorization:APPCODE "+AppUrl.ALI_API_APPCODE)
    @GET()
    Observable get(@Url String url,@QueryMap Map<String,String> map);

 


}

2.使用:每个call只能执行一次,可以每次都重新获取,也可以通过克隆call.clone()获取一个新的执行;

String(get) 返回值

Call<ResponseBody> call = ...;//封装之类网上搜索
if (type == 1){
            call = ApiFactory.getLiangCaiApi().getWebData();//获取相应的call
            call.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    ResponseBody bodys = response.body();//如果是下载东西(这里是图片)response.body().bytes
                    bodys.string;//获取数据,,,response.body().bytes()获取的是byte数组,(比如下载的图片)
                }

                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                    showToast("失败");
                }
            });
        }else {
            call = ApiFactory.getLiangCaiApi().getWebData(getWebUrl());
            call.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    
                }

                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                    showToast("失败");
                }
            });
        }

post

Call<LoginBean> call;
call = call = ApiFactory.getRetrofitApi().login(getJson());
        call.enqueue(new CallBack<LoginBean>() {
            @Override
            public void onResponse(LoginBean result) {
                //result  实体类对象
            }

            @Override
            public void onFailure(String error) {

            }
        });
/**
     * post请求
     * */
    JSONObject jObject;
    private JSONObject getJson() {
        jObject = new JSONObject();
        try {
            jObject.put("name", "111");
            jObject.put("password", "123456");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return jObject;
    }

3.自定义CallBack

自定义一个自己的MyCallBack继承CallBack

可以通过多态的方式(实体类的基类)在自定义的CallBack里预先处理一些内容

单纯的retrofit,没有使用rxjava

posted @ 2016-10-12 08:20  西瓜皮不甜  阅读(200)  评论(0编辑  收藏  举报