现在有这样一种需求,假如有一个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() 操作呢?当然,从某种程度上来讲,我们不管其是否分组,只要数据获取成功就进行刷新操作,这样并没有什么不妥。
网友评论