Rxjava+Retrofit

1 篇文章 0 订阅
1 篇文章 0 订阅
定义接口

public interface ApiService {
    /**
     * 获取服务器时间
     * @return
     */
    @GET("serverTime.json")
    Observable<ServerTimeResBean> getServerTime();
}
//HttpManager 
public class HttpManager {
    private static final String BASE_URL = "https://XXX.com/";
    private static HttpManager INSANCE;
    private ApiService apiService;;

    public static HttpManager getInstance(){
        if(INSANCE == null){
            synchronized (HttpManager.class){
                if(INSANCE == null){
                    INSANCE= new HttpManager();
                }
            }
        }
        return INSANCE;
    }

    private HttpManager(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(new OkHttpClient.Builder()
                        .connectTimeout(15L, TimeUnit.SECONDS)//设置超时时间
                        .retryOnConnectionFailure(true)
                        .addInterceptor(new CommonInterceptor()).build())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        apiService = retrofit.create(ApiService.class);
    }

    public ApiService getApiService(){
        return apiService;
    }
}

 

//拦截器,可以打印日志,或者修改接口参数,加请求头

public class CommonInterceptor  implements Interceptor {
    private static final String TAG = "CommonInterceptor";
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request =  chain.request();
        //可以修改参数 ...

        Response response = chain.proceed(request);
        HttpUrl url = request.url();

        Charset charset;
        charset = Charset.forName("UTF-8");
        ResponseBody responseBody = response.peekBody(Long.MAX_VALUE);
        Reader jsonReader = new InputStreamReader(responseBody.byteStream(), charset);
        BufferedReader reader = new BufferedReader(jsonReader);
        StringBuilder sbJson = new StringBuilder();
        String line = reader.readLine();
        do {
            sbJson.append(line);
            line = reader.readLine();
        } while (line != null);
        //打印接口日志
        Log.e(TAG, "method :" + request.method() + " ,url:"+ url +" ,response: " + sbJson);
        return response;
    }
}

//接口调用:

HttpManager.getInstance().getApiService().getServerTime()
        .observeOn(AndroidSchedulers.mainThread())
    .subscribeOn(Schedulers.io()).subscribe(new Consumer<ServerTimeResBean>() {
    @Override
    public void accept(ServerTimeResBean serverTimeResBean) throws Exception {
        Toast.makeText(MainActivity.this, "get server time:" + gson.toJson(serverTimeResBean), Toast.LENGTH_SHORT).show();
    }
}, new Consumer<Throwable>() {
    @Override
    public void accept(Throwable throwable) throws Exception {
        Log.e(TAG, "error: -->>" + throwable.toString());
    }
});

 

引入库:

   implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'

// 用Gson解析json的转换器
    implementation 'com.google.code.gson:gson:2.8.5'

//rxjava2
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.5'

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值