Retrofit2+RxJava 简单使用

本文介绍如何使用Retrofit2与RxJava进行网络请求的封装,包括接口定义、网络请求类创建、自定义拦截器及具体调用示例。通过这种方式可以简化HTTP请求流程并增强代码的可读性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

##前言 学习Retrofit2+RxJava时间不长,大概知道怎么用。根据需求简单的封装一下。

1.接口

public interface GankIO{
	@GET("App/10/{index}")
	Call<AndroidBean> getApp(@Path("index") String index);
}
复制代码

@POST 请求方式
("819-1") URL地址
@QueryMap Map<String,String> cityId 请求参数 ResponseBody 返回数据

2.网络请求类#

public class HttpManager {

	public final static int CONNECT_TIMEOUT =5;
	public final static int READ_TIMEOUT=5;
	public final static int WRITE_TIMEOUT=5;
	//服务器地址
	private static final String BASE_URL = "";
	private static Retrofit retrofit;

	private static Retrofit getRetrofit() {
    	if (retrofit == null) {
        	//网络缓存路径文件
        	// File httpCacheDirectory = new File(BaseApplication.getInstance().getExternalCacheDir(), "responses");
        	//通过拦截器设置缓存,暂未实现
        	//CacheInterceptor cacheInterceptor = new CacheInterceptor();

        	OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
                .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
                .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
                .addInterceptor(new MyInterceptors())
                .build();

        	retrofit = new Retrofit.Builder()
                .client(client)
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
    	}
    	return retrofit;
	}
}
复制代码

3.拦截器 MyInterceptors#

public class MyInterceptors implements Interceptor {
    private static final String TAG = "MyInterceptors";
    @Override
    public Response intercept(Chain chain) throws IOException {

        //封装headers
        Request request = chain.request().newBuilder()
                .addHeader("model","24037") //手机型号
                .build();
        Headers headers = request.headers();
        //打印
        System.out.println("phoneModel is : " + headers.get("phoneModel"));
        String requestUrl = request.url().toString(); //获取请求url地址
        String methodStr = request.method(); //获取请求方式
        RequestBody body = request.body(); //获取请求body
        String bodyStr = (body==null?"":body.toString());
        //打印Request数据
        Log.d(TAG, "intercept: Request Url is :" + requestUrl + "\nMethod is : " + methodStr + "\nRequest Body is :" + bodyStr + "\n");

        Response response = chain.proceed(request);

        if (response != null) {
            //byte[] str = Base64.decode(response.body().string(), Base64.DEFAULT);
//            s1 = Base64Decoder.decode(response.body().string());
            //s1 = new String(str);
        } else {
            System.out.println("Respong is null");
        }
        Log.d(TAG, "intercept: response  "+response.body().toString());
        return response;
    }
}
复制代码

4.调用

Api.getRetrofit().create(GankIO.class).getApp(index).enqueue(new Callback<AndroidBean>() {
        @Override
        public void onResponse(Call<AndroidBean> call, Response<AndroidBean> response) {
          //请求成功处理
        }

        @Override
        public void onFailure(Call<AndroidBean> call, Throwable t) {
           //请求失败处理
        }
    });复制代码

转载于:https://juejin.im/post/5b8f9580f265da0aa949e948

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值