package com.example.jingbin.cloudreader.model; import android.text.TextUtils; import com.example.jingbin.cloudreader.app.ConstantsImageUrl; import com.example.jingbin.cloudreader.bean.AndroidBean; import com.example.jingbin.cloudreader.bean.FrontpageBean; import com.example.jingbin.cloudreader.bean.GankIoDayBean; import com.example.jingbin.cloudreader.http.HttpClient; import com.example.jingbin.cloudreader.http.RequestImpl; import com.example.jingbin.cloudreader.utils.SPUtils; import java.util.ArrayList; import java.util.List; import java.util.Random; import rx.Observable; import rx.Observer; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by jingbin on 2016/12/1. * 每日推荐model */ public class EverydayModel { private String year = "2016"; private String month = "11"; private String day = "24"; private static final String HOME_ONE = "home_one"; private static final String HOME_TWO = "home_two"; private static final String HOME_SIX = "home_six"; public void setData(String year, String month, String day) { this.year = year; this.month = month; this.day = day; } /** * 轮播图 */ public void showBanncerPage(final RequestImpl listener) { Subscription subscription = HttpClient.Builder.getTingServer().getFrontpage() .observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()) .subscribe(new Observer<FrontpageBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { listener.loadFailed(); } @Override public void onNext(FrontpageBean frontpageBean) { frontpageBean.getResult().getFocus(); listener.loadSuccess(frontpageBean); } }); listener.addSubscription(subscription); } /** * 显示RecyclerView数据 */ public void showRecyclerViewData(final RequestImpl listener) { SPUtils.putString(HOME_ONE, ""); SPUtils.putString(HOME_TWO, ""); SPUtils.putString(HOME_SIX, ""); Func1<GankIoDayBean, Observable<List<List<AndroidBean>>>> func1 = new Func1<GankIoDayBean, Observable<List<List<AndroidBean>>>>() { @Override public Observable<List<List<AndroidBean>>> call(GankIoDayBean gankIoDayBean) { List<List<AndroidBean>> lists = new ArrayList<>(); GankIoDayBean.ResultsBean results = gankIoDayBean.getResults(); if (results.getAndroid() != null && results.getAndroid().size() > 0) { addUrlList(lists, results.getAndroid(), "Android"); } if (results.getWelfare() != null && results.getWelfare().size() > 0) { addUrlList(lists, results.getWelfare(), "福利"); } if (results.getiOS() != null && results.getiOS().size() > 0) { addUrlList(lists, results.getiOS(), "IOS"); } if (results.getRestMovie() != null && results.getRestMovie().size() > 0) { addUrlList(lists, results.getRestMovie(), "休息视频"); } if (results.getResource() != null && results.getResource().size() > 0) { addUrlList(lists, results.getResource(), "拓展资源"); } if (results.getRecommend() != null && results.getRecommend().size() > 0) { addUrlList(lists, results.getRecommend(), "瞎推荐"); } if (results.getFront() != null && results.getFront().size() > 0) { addUrlList(lists, results.getFront(), "前端"); } if (results.getApp() != null && results.getApp().size() > 0) { addUrlList(lists, results.getApp(), "App"); } return Observable.just(lists); } }; Observer<List<List<AndroidBean>>> observer = new Observer<List<List<AndroidBean>>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { listener.loadFailed(); } @Override public void onNext(List<List<AndroidBean>> lists) { listener.loadSuccess(lists); } }; Subscription subscription = HttpClient.Builder.getGankIOServer().getGankIoDay(year, month, day) .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()) .flatMap(func1) .subscribe(observer); listener.addSubscription(subscription); } // subList没有实现序列化!缓存时会出错! private void addUrlList(List<List<AndroidBean>> lists, List<AndroidBean> arrayList, String typeTitle) { // title AndroidBean bean = new AndroidBean(); bean.setType_title(typeTitle); ArrayList<AndroidBean> androidBeen = new ArrayList<>(); androidBeen.add(bean); lists.add(androidBeen); int androidSize = arrayList.size(); if (androidSize > 0 && androidSize < 4) { lists.add(addUrlList(arrayList, androidSize)); } else if (androidSize >= 4) { ArrayList<AndroidBean> list1 = new ArrayList<>(); ArrayList<AndroidBean> list2 = new ArrayList<>(); for (int i = 0; i < androidSize; i++) { if (i < 3) { list1.add(getAndroidBean(arrayList, i, androidSize)); } else if (i < 6) { list2.add(getAndroidBean(arrayList, i, androidSize)); } } lists.add(list1); lists.add(list2); } } private AndroidBean getAndroidBean(List<AndroidBean> arrayList, int i, int androidSize) { AndroidBean androidBean = new AndroidBean(); // 标题 androidBean.setDesc(arrayList.get(i).getDesc()); // 类型 androidBean.setType(arrayList.get(i).getType()); // 跳转链接 androidBean.setUrl(arrayList.get(i).getUrl()); // 随机图的url if (i < 3) { androidBean.setImage_url(ConstantsImageUrl.HOME_SIX_URLS[getRandom(3)]);//三小图 } else if (androidSize == 4) { androidBean.setImage_url(ConstantsImageUrl.HOME_ONE_URLS[getRandom(1)]);//一图 } else if (androidSize == 5) { androidBean.setImage_url(ConstantsImageUrl.HOME_TWO_URLS[getRandom(2)]);//两图 } else if (androidSize >= 6) { androidBean.setImage_url(ConstantsImageUrl.HOME_SIX_URLS[getRandom(3)]);//三小图 } return androidBean; } private List<AndroidBean> addUrlList(List<AndroidBean> arrayList, int androidSize) { List<AndroidBean> tempList = new ArrayList<>(); for (int i = 0; i < androidSize; i++) { AndroidBean androidBean = new AndroidBean(); // 标题 androidBean.setDesc(arrayList.get(i).getDesc()); // 类型 androidBean.setType(arrayList.get(i).getType()); // 跳转链接 androidBean.setUrl(arrayList.get(i).getUrl()); // DebugUtil.error("---androidSize: " + androidSize); // 随机图的url if (androidSize == 1) { androidBean.setImage_url(ConstantsImageUrl.HOME_ONE_URLS[getRandom(1)]);//一图 } else if (androidSize == 2) { androidBean.setImage_url(ConstantsImageUrl.HOME_TWO_URLS[getRandom(2)]);//两图 } else if (androidSize == 3) { androidBean.setImage_url(ConstantsImageUrl.HOME_SIX_URLS[getRandom(3)]);//三图 } tempList.add(androidBean); } return tempList; } /** * 取不同的随机图,在每次网络请求时重置 */ private int getRandom(int type) { String saveWhere = null; int urlLength = 0; if (type == 1) { saveWhere = HOME_ONE; urlLength = ConstantsImageUrl.HOME_ONE_URLS.length; } else if (type == 2) { saveWhere = HOME_TWO; urlLength = ConstantsImageUrl.HOME_TWO_URLS.length; } else if (type == 3) { saveWhere = HOME_SIX; urlLength = ConstantsImageUrl.HOME_SIX_URLS.length; } String home_six = SPUtils.getString(saveWhere, ""); if (!TextUtils.isEmpty(home_six)) { // 已取到的值 String[] split = home_six.split(","); Random random = new Random(); for (int j = 0; j < urlLength; j++) { int randomInt = random.nextInt(urlLength); boolean isUse = false; for (String aSplit : split) { if (!TextUtils.isEmpty(aSplit) && String.valueOf(randomInt).equals(aSplit)) { isUse = true; break; } } if (!isUse) { StringBuilder sb = new StringBuilder(home_six); sb.insert(0, randomInt + ","); SPUtils.putString(saveWhere, sb.toString()); return randomInt; } } } else { Random random = new Random(); int randomInt = random.nextInt(urlLength); SPUtils.putString(saveWhere, randomInt + ","); return randomInt; } return 0; } }