在从后台获取JSON数据解析后,放到全局的allList中,然后调用adapter.notifyDataSetChanged()方法,发现数据并没有更新.
原因为: 当用JSON解析出list时,如果直接赋值给全局allList,会直接产生一个新的list给allList,adapter会判定不是原有的对象,无法实现更新.
关于JSON解析数组的源码,这里使用的是fastjson中parseArray方法
public static <T> List<T> parseArray(String text, Class<T> clazz) {
if (text == null) {
return null;
}
List<T> list;
DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance());
JSONLexer lexer = parser.lexer;
int token = lexer.token();
if (token == JSONToken.NULL) {
lexer.nextToken();
list = null;
} else if (token == JSONToken.EOF && lexer.isBlankInput()) {
list = null;
} else {
list = new ArrayList<T>();
parser.parseArray(clazz, list);
parser.handleResovleTask(list);
}
parser.close();
return list;
}
这里很明显又new了一个list出来.
所以在解析时可以这样写.
List<Other> listMain = JSON.parseArray(data,Other.class)
allList.clear()
allList.addAll(listMain)
adapter.notifyDataSetChanged()