使用rxjava,retrofit,okhttp实现mvp模式的数据解析

来源:互联网 发布:面试美工需要注意什么 编辑:程序博客网 时间:2024/05/21 09:47
为了方便项目中的数据解析,我们可以在构建框架的时候先写一个数据解析类。

首先,现在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
原创粉丝点击