使用rxjava,retrofit,okhttp实现mvp模式的数据解析
来源:互联网 发布:面试美工需要注意什么 编辑:程序博客网 时间:2024/05/21 09:47
为了方便项目中的数据解析,我们可以在构建框架的时候先写一个数据解析类。
接着创建一个Bean类,要与请求到的数据字段相对应。
首先,现在gradle里面添加如下代码。
compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1' compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.squareup.okio:okio:1.5.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' compile 'com.google.code.gson:gson:2.6.2'然后,我们定义一个MyHttpHelper类。
public class MyHttpHelper { private static final String TAG = "MyHttpHelper 调试信息》》》》》"; //基地址 public static final String BASE_URL = ""; //延时设置5秒 private static final int DEFAULT_TIMEOUT = 5; // retrofit对象 private Retrofit retrofit; //构造方法私有 private MyHttpHelper() { //手动创建一个OkHttpClient并设置超时时间 OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder(); httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); httpClientBuilder.addInterceptor(new UserAgentInterceptor(System.getProperty("http.agent"))); retrofit = new Retrofit.Builder() .client(httpClientBuilder.build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .baseUrl(BASE_URL) .build(); } //在访问HttpMethods时创建单例 private static class SingletonHolder{ private static final MyHttpHelper INSTANCE = new MyHttpHelper(); } //获取单例 public static MyHttpHelper getInstance(){ return MyHttpHelper.SingletonHolder.INSTANCE; } public Retrofit getRetrofit(){ if (retrofit==null){ return null; } return retrofit; } /** * 拦截器 */ public final class UserAgentInterceptor implements Interceptor { private static final String USER_AGENT_HEADER_NAME = "User-Agent"; private String userAgentHeaderValue; public UserAgentInterceptor(String userAgentHeaderValue) { if (!TextUtils.isEmpty(userAgentHeaderValue)){ this.userAgentHeaderValue = userAgentHeaderValue; } } @Override public Response intercept(Chain chain) throws IOException { final Request originalRequest = chain.request(); final Request requestWithUserAgent = originalRequest.newBuilder() .removeHeader(USER_AGENT_HEADER_NAME) .addHeader(USER_AGENT_HEADER_NAME, userAgentHeaderValue) .build(); return chain.proceed(requestWithUserAgent); } }}尤其要注意基地址必须以/结尾。
接着创建一个Bean类,要与请求到的数据字段相对应。
public class Result_bean { private String reason; private Data_bean result; public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } public Data_bean getResult() { return result; } public void setResult(Data_bean result) { this.result = result; }}创建一个接口,用来与基地址合并,并附上相应的方法。
public interface Server { //不传参的get方式 @GET("xxx") Observable<xxx> getxxx(); //传参的get方式 @GET("xxx/{user_id}/{amount}") Observable<xxx> getxxx(@Path("user_id") String usrid, @Path("amount") String amount); //传json对象的post方式 @POST("xxx") Observable<xxx> getxxx(@Body Post_FindHelp_Info post_findHelp_infoInFree);}由于我们采用mvp模式,所以数据的展示可以写在接口里面,比如定义一个接口,使用toast方法将数据展示出来,在需要的那个activity里面implement,并实现其方法就行了,数据的处理就放在presenter里面。下面是presenter类。
public class Presenter { private ShowToast showToast; public Presenter(ShowToast showToast) { this.showToast = showToast; } public void GetData(){ Subscriber<Result_bean> subscriber = new Subscriber<Result_bean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Result_bean result_bean) { showToast.Show(result_bean.getResult().getData().get(0).getTitle(),result_bean.getResult().getData().get(0).getDate(),result_bean.getResult().getData().get(0).getAuthor_name(),result_bean.getResult().getData().get(0).getType()); } }; MyHttpHelper.getInstance().getRetrofit() .create(Server.class)//对应于基地址合并的那个接口类 .getxxx()//接口类里面的方法 .subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); }}
3 0
- 使用rxjava,retrofit,okhttp实现mvp模式的数据解析
- Rxjava+Retrofit+okhttp+mvp实现
- Retrofit+RxJava+Okhttp+RecycleView+MVP简单的展示数据
- MVP+Rxjava+Okhttp+Retrofit+XRecyclerview请求数据
- RxJava+Retrofit+OkHttp+mvp
- mvp+rxjava+retrofit+okhttp
- MVP+Retrofit+Okhttp+RxJava
- Retrofit+Rxjava+Okhttp+MVP
- 终极封装 Rxjava+Retrofit+okhttp+mvp实现
- Okhttp+Retrofit+Rxjava+MVP联合使用
- Retrofit+RxJava+MVP模式使用
- RxJava+okhttp+Retrofit+Mvp 的封装
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- MVP+Rxjava+Retrofit的使用
- 简单MVP-Retrofit-Rxjava-OKhttp
- Android Mvp设计模式结合RxJava+OkHttp+retrofit浅谈
- MVP和Retrofit+Rxjava+OkHttp封装结合请求数据
- mvp demo:mvp+rxjava+retrofit(okhttp)+greendao
- OpenLayer3自定义测量控件 MeasureTool
- linux 进程同步-- mutex和文件锁
- React Native入门:关于JSX语法
- QT实现按钮的三态
- angular指令传值(源码及注释)
- 使用rxjava,retrofit,okhttp实现mvp模式的数据解析
- Java-日期工具类
- java日志组件介绍(common-logging,log4j,slf4j,logback )
- 中断屏蔽技术
- android 动态加载sd卡的jar文件
- java中注解的使用与实例(一)
- 建立索引的原则
- 基于php的银行卡实名认证接口调用代码实例
- MangoDB+Express+AngularJS+NodeJS搭建待办任务管理系统(一)