Retrofit 结合rxjava框架用法
来源:互联网 发布:ssh弱算法支持 漏洞 编辑:程序博客网 时间:2024/06/05 17:34
Retrofit是对okhttp的封装库,通过注解支持restful写法,更简洁,更优雅。
1.引入
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2' compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1'
如果需要将返回结果用GSON解析,还需要引入convert库
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
2.创建Retrofit对象工具类
public class RetrofitClientUtil { private static HashMap<String, Retrofit> retorfitMaps = new HashMap<>(); //根据baseUrl不同,缓存Retrofit对象 private static Retrofit getRetrofit(String baseUrl) { if (!retorfitMaps.containsKey(baseUrl)) { OkHttpClient client = new OkHttpClient(); client.setReadTimeout(30, TimeUnit.SECONDS); client.setRetryOnConnectionFailure(true); client.setConnectTimeout(20, TimeUnit.SECONDS);//设置超时 client.setWriteTimeout(30, TimeUnit.SECONDS); //client.interceptors().add(new NotEdcodeLoggingInterceptor());//不加密时日志 client.networkInterceptors().add(new RequestHeaderInterceptor());//请求头 Retrofit retrofit = new Retrofit .Builder()// .baseUrl(CommunityConstants.SERVER_URI_NEW) .baseUrl(baseUrl) .addCallAdapterFactory(RxJavaCallAdapterFactory.create())// .addConverterFactory(EncryptionGsonConvertrFactory.create())//加密 .addConverterFactory(GsonConverterFactory.create())//不加密 .client(client) .build(); retorfitMaps.put(baseUrl,retrofit); } return retorfitMaps.get(baseUrl); } public static <T> T createRequest(Class<T> service) { Retrofit retrofit = getRetrofit(Constans.SERVER_URI_NEW); T instance = retrofit.create(service); return (T) requestMaps.get(service); }}
3.网络请求类:
(1)新建网络请求回调接口
public interface HttpBackListener { void onSuccess(String requestId, Object object); void onException(String requestId,String error);}
(2)新建网络请求工具类
public class HttpRequestPresenter { public Subscription updateUserInfo(String requestId,User user, HttpBackListener listener) { UserService userService = HttpClient.createRequest(UserService.class); return userService.updateUserInfo(user).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new SubscriberImpl<LockInfoData>(requestId, listener)); } class SubscriberImpl<T> extends Subscriber<T> { private HttpBackListener listener; private String requestId; private SubscriberImpl(String requestId, HttpBackListener listener) { this.listener = listener; this.requestId = requestId; } public SubscriberImpl() { super(); } @Override public void onCompleted() { } @Override public void onError(Throwable e) { if (listener != null) listener.onException(requestId, e.getMessage()); } @Override public void onNext(T t) { if (listener != null) listener.onSuccess(requestId, t); } }}
4.请求服务接口
public interface UserService<T> { @POST("userService/updateUserInfo") Observable<User> updateUserInfo(@Body User user);}
5.调用
HttpRequestPresenter httpPresenter = new HttpRequestPresenter(); httpPresenter.updateUserInfo("updateUserInfo", user, new HttpBackListener() { @Override public void onSuccess(String requestId, Object object){ } @Override public void onException(String requestId, String error{ } });
- 如上框架使用就算完成了,下面讲一下服务接口注解的用法
(1)@path
/**http://xxx.com/userService/getUser/2/sun*/ @GET("userService/getUser/{id}/{name}") Observable<User> getUser(@Path("id") String id,@Path("name") String name);
(2)@Query
/**http://xxx.com/userService/getUser?name=sun*/ @GET("userService/getUser") Observable<User> getUser(@Query("name") String name);
(3)@QueryMap (效果同Query)
@GET("userService/getUser") Observable<User> getUser(@QueryMap Map<String, String> map);
还有一种类似的,传
(4)@Multipart
@POST("userService/uploadFiles") @Multipart Observable<User> uploadFiles(@Part("name") RequestBody name, @Part("age") RequestBody age, @Part MultipartBody.Part file);
或者
@POST("userService/uploadFiles") @Multipart Observable<User> uploadFiles(@PartMap Map<String, RequestBody> maps, @Part MultipartBody.Part file);
文件上传代码
MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", "test.txt", file);UserService userService = HttpClient.createRequest(UserService.class); userService.uploadFiles("name","age",filePart).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SubscriberImpl<LockInfoData>(requestId, listener));
还有Field、FieldMap、Header、Headers、Url等注解,不过以上基本上开发中能碰到的需求都能cover掉了。
阅读全文
0 0
- Retrofit 结合rxjava框架用法
- Retrofit结合RxJava使用说明
- rxjava和retrofit结合
- Retrofit与Rxjava结合
- RxJava + Retrofit 结合使用
- Retrofit结合rxjava使用
- RxJava和Retrofit结合
- 【android进阶篇】MVP+Retrofit+RxJava框架结合
- 结合Retrofit,RxJava,Okhttp,FastJson的网络框架RRO
- 结合Retrofit,RxJava,Okhttp,FastJson的网络框架RRO
- 第三方框架RxJava和Retrofit结合及实例
- Retrofit 和 RxJava 结合使用
- RxJava与Retrofit结合学习
- RxJava,Retrofit,OkHttp3结合使用
- Retrofit笔记->结合Rxjava初识
- Retrofit和RxJava结合使用
- RxJava RxAndroid Retrofit实践结合
- RxJava+Retrofit+okhttp实践结合
- 求二进制序列中1的个数及奇偶序列+输出整数的每一位+两个数中多少个bit位不同
- css3实现图片木桶布局
- 百度地图API ajax异步获取数据库信息 页面显示多点标注和标注框
- Ubuntu 17.10 Android Studio 无法打开虚拟机问题
- 【Java性能】你需要知道的:Java字符串连接使用"+"和StringBuilder性能比较
- Retrofit 结合rxjava框架用法
- JDBC基本概念
- 蓝桥杯 基础练习 特殊回文数/回文数
- [译] ubuntu install tomcat maven
- MFC ListControl用法
- jzoj5478. 【NOIP2017提高组】列队
- Linux IP in IP隧道简述
- Java8---Stream的介绍和相关概念(1)
- [Java性能剖析]JVM Management API