我又开始了~
先写协议接口
/** * @time:2018/4/10 at 14:29 * @description: * 1.获取首页上的人物 * 2.获取某个人物信息 * 3.获取某字母开头的人物列表 * 4.获取文章信息 */ public interface QulishiContract { interface QuModel extends BaseModel { Observable<ResponseBody> getRenwu(); Observable<ResponseBody> getRenwuPerson(String person); Observable<ResponseBody> getRenwuCharList(String s); Observable<ResponseBody> getRenwuWenzhang(String wenzhang); } interface QuView extends BaseView { void returnRenwu(ArrayList<QulishiBean> beans); void returnRenwuPerson(QulishiPersonBean bean); void returnRenwuPersonList(ArrayList<QulishiBean> beans); void returnRenwuWenzhang(String s); } abstract class QuPresenter extends BasePresenter<QuModel, QuView> { public abstract void requestRenwu(); public abstract void requestRenwuPerson(String s); public abstract void requestRenwuCharList(String s); public abstract void requestRenwuWenzhang(String s); } }
然后写一下RetrofitAPI类
public interface RetrofitService { ; String BASE_URL3 = "http://www.qulishi.com/"; /** * 测试接口 * * @return */ //人物首页 @GET("renwu") Observable<ResponseBody> getRenwu(); //具体的某个人物 @GET("renwu/{person}") Observable<ResponseBody> getRenwuOne(@Path("person") String person); //具体的某个字母开头的列表 @GET("renwu/{char}") Observable<ResponseBody> getRenwuChar(@Path("char") String s); //具体的某个字母开头的列表 @GET("{wenzhang}") //http://www.qulishi.com/article/201804/280396.html Observable<ResponseBody> getRenwuWenzhang(@Path("wenzhang") String s); }
Retrofit封装
public class RetrofitFactory { private static final int TIMEOUT_READ = 20; private static final int TIMEOUT_CONNECTION = 10; private static final HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY); private static CacheInterceptor cacheInterceptor = new CacheInterceptor(); private static OkHttpClient okHttpClient = new OkHttpClient.Builder() //SSL证书 .sslSocketFactory(TrustManager.getUnsafeOkHttpClient()) .hostnameVerifier(org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER) //打印日志 .addInterceptor(interceptor) //设置Cache .addNetworkInterceptor(cacheInterceptor)//缓存方面需要加入这个拦截器 .addInterceptor(cacheInterceptor) .cache(HttpCache.getCache()) //time out .connectTimeout(TIMEOUT_CONNECTION, TimeUnit.SECONDS) .readTimeout(TIMEOUT_READ, TimeUnit.SECONDS) .writeTimeout(TIMEOUT_READ, TimeUnit.SECONDS) //失败重连 .retryOnConnectionFailure(true) .build(); public static <T> T createApi(Class<T> clazz) { return createApi(clazz, RetrofitService.BASE_URL); } public static <T> T createApi(Class<T> clazz, String url) { Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .client(okHttpClient) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); return retrofit.create(clazz); } }
这样就可以开心的写Model层了,写一个接口好了
public class QulishiM implements QulishiContract.QuModel { @Override public Observable<ResponseBody> getRenwu() { return RetrofitFactory.createApi(RetrofitService.class, RetrofitService.BASE_URL3) .getRenwu().compose(RxUtil.rxSchedulerHelper()); }}
public class QulishiP extends QulishiContract.QuPresenter { //获取首页上的人物 @Override public void requestRenwu() { RxManager.add(mModel.getRenwu().subscribe(responseBody -> { try { ArrayList<QulishiBean> beans; Document parse = Jsoup.parse(responseBody.string()); Elements select = parse.select("div.strasegy_name"); select = select.select("a[href]"); beans = new ArrayList<>(); for (Element e : select) { beans.add(new QulishiBean(e.text(), e.attr("href"))); LogUtil.e(e.text() + e.attr("href")); } mView.returnRenwu(beans); } catch (IOException | StringIndexOutOfBoundsException e) { e.printStackTrace(); } }, Throwable -> mView.showError(Throwable.toString()))); }}