retrofit<一>


Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求,其源码详见OkHttp Github。

怎么用

1导入包

// retrofit
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

2创造一个retrofit单例

创造一个单例是为了在代码中调用时不用每次都创建对象。

public class InitRetrofit {


    private static Retrofit  retrofitInstance ;
 

    public static Retrofit getRetrofitInstance(){

        if(retrofitInstance == null){
             retrofitInstance = new Retrofit.Builder()
                     .baseUrl(ParamConfig.TEST_HOST)
                     .addConverterFactory(GsonConverterFactory.create(gson))
                     .build();
        }
        return  retrofitInstance;
    }
}

3定义接口api

public interface TaskService {

    @FormUrlEncoded
    @POST(ParamConfig.GET_TASK)
    //Call<JsonObject> getTaskList(@Field("request")String requestParam);
    Call<Response> getTaskList(@Field(ParamConfig.PARAM_KEY)String requestParam);
    
}

定义一个接口类,可以将有关接口都放在其中。 定义一个接口==@POST== @GET注解,括号内追加接口名就好,因为在实例化retrofit时 retrofitInstance = new Retrofit.Builder() .baseUrl(ParamConfig.TEST_HOST) baseUrl 这是host url。 在定义方法时,Call<JsonObject> 或者Call<T> 这是返回对象的类型,在方法定义参数时,@Field(String key)String paramValue 。

4 调用方法

// 实例化
        TaskService taskService = InitRetrofit.getRetrofitInstance().create(TaskService.class);
        // 调用Api
        Call<Response> taskListCall = taskService.getTaskList(ParamConfig.buildParam(jsonParam));
        // clone a object
        Call<Response> clone = taskListCall.clone();
        // 异步
        clone.enqueue(new Callback<Response>() {
            @Override
            public void onResponse(Call<Response> call, retrofit2.Response<Response> response) {
                // 返回数据体
                Response rep = response.body();
               
            }

            @Override
            public void onFailure(Call<Response> call, Throwable t) {
               
            }
        });

这样就基本完成了一次post请求。之后会涉及到上传文件等方法的调用。

导入日志,查看具体的网络请求

首先需要导入:

compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'

其次需要添加如下代码:

public class InitRetrofit {

    public  static HttpLoggingInterceptor getHttpLoggingInterceptor() {
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(
                new HttpLoggingInterceptor.Logger() {

                    @Override
                    public void log(String message) {
                        Log.e("OkHttp", "log = " + message);
                    }

                });
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        return loggingInterceptor;
    }
    private static Retrofit  retrofitInstance ;
    static OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(getHttpLoggingInterceptor()).build();

    public static Retrofit getRetrofitInstance(){

        Gson gson = new GsonBuilder()
                .setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
                .create();//使用 gson coverter,统一日期请求格式


        if(retrofitInstance == null){
             retrofitInstance = new Retrofit.Builder()
                     .baseUrl(ParamConfig.TEST_HOST)
                     .addConverterFactory(GsonConverterFactory.create(gson))
                     .client(httpClient)
                     .build();
        }
        return  retrofitInstance;
    }
}

其中这段代码:

public  static HttpLoggingInterceptor getHttpLoggingInterceptor() {
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(
                new HttpLoggingInterceptor.Logger() {

                    @Override
                    public void log(String message) {
                        Log.e("OkHttp", "log = " + message);
                    }

                });
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        return loggingInterceptor;
    }
    
    
       static OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(getHttpLoggingInterceptor()).build();

这部分写入即可看到log日志,主要还是要在retrofit实例化的时候写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值