List分组请求数据

2016-08-17  本文已影响26人  Micrason

现在有这样一种需求,假如有一个List,List中存放未知数量的字符串代码,例如:“000007.SZ”,我们希望通过List中的字符代码来获取相对应得股票当前价信息,而当前接口一次最多接受100个股票代码的请求,那么我们如何对List中的所有股票代码的数据请求完成,并无差错的将所有的股票的当前价信息一一保存并对应呢?

1、首先我们得对List中的股票代码进行分组,每100个为一组,确定相分组的结果:

    private int getGroupNumber() {
        int listSize = list.size();
        int group;
        if (listSize % 100 == 0) {
            group = listSize / 100;
        } else {
            group = listSize / 100 + 1;
        }
        return group;
    }

2、将group返回之后,我们使用循环获取各组的股票代码信息并组成新的String,以便获取相对应股票的当前价。

    //分组获取股票代码集并请求数据
    private void getPriceAndupDown() {
        int group = getGroupNumber();
        for (int i = 0; i < group; i++) {
            String codes;
            if (i * 100 + 99 < list.size()) {
                codes = getCode(i * 100, (i * 100) + 99);
            } else {
                codes = getCode(i * 100, list.size());
            }
            initRealDatas(i * 100, codes);
        }
    }
    //根据索引获取股票代码集
    private String getCode(int start, int end) {
        String codes = "";
        for (int i = start; i < end; i++) {
            String code = list.get(i).Zqdm;
            if (code.subSequence(0, 1).equals("6")) {
                codes += code + ".SS,";
            } else {
                codes += code + ".SZ,";
            }
        }
        return codes.substring(0, codes.length() - 1);
    }

3、在进行真实的价格请求时应注意List的对应关系。

    private void parseRealDatas(int start, String codes) {
        for (int i = start; i < codes.split(",").length; i++) {
            //解析数据,此处省略
            ...
            if (i < list.size()) {
                //price由上面数据解析而来
                list.get(i).price = price;
            }
        }
    }

4、最后进行数据刷新就可以了,一般来说我们数据都是放在ListView/RecycleView中展示的,那么问题来了,在进行分组请求时,由于网络等不确定性因素,我们什么时候进行数据的刷新 notifyDataSetChanged() 操作呢?当然,从某种程度上来讲,我们不管其是否分组,只要数据获取成功就进行刷新操作,这样并没有什么不妥。

上一篇 下一篇

猜你喜欢

热点阅读