调用接口后Activity或者Fragment的listview数据重复

1. 概述

有时候我们在开发过程中,调用服务器接口之后,会返回一个 list集合,我们会用这个list的数据给 ListView或者RecyclerView填充数据,但是有时候会出现一种情况就是:切换到某个页面然后再次切换回来,listview数据会重复,而且是切换一次重复一次、切换一次重复一次;

2. 具体场景

如果出现 listview 页面的数据重复,自己遇到的出现的场景如下:

1>:如果自己在最外层定义了一个 allList集合,用于在请求接口后返回的list之后,把 接口返回的list添加到 allList中,即就是: allList.addAll(list);

2>:这里调用服务器接口是在 Activity的 onResume()方法中调用的:
如果需要给服务器传递的参数是 类似 "0,1,2" 这样的字符串,是多个字符串,然后用 " , " 隔开,如果 "0,1,2" 这样的字段是调用 服务器的第一个接口时返回的一个list集合,然后自己遍历 list集合,获取到 所有的 bin银行卡号,需要定义一个 变量 flag,然后把多个银行卡号 bin 拼接然后赋值给flag,给 flag 初始化值是 " ",是空字符串,当你第一次在 Activity请求服务器接口时 ,服务器返回一个集合,然后给 listview 填充数据,点击 "+" 加号跳转到下一个 Activity ,然后点击返回键 重新返回到 填充 listview 的 Activity,这个时候发现 listview 页面数据重复了,而且返回几次数据就重复几次;

3. 解决方法

1>:如果给最外层定义了 allList 集合,把 服务器返回的 list 添加到 allList集合,即就是: allList.addAll(list),只需要在 添加addAll(list) 之前,把allList集合清空即可, 即就是:allList.clear();
2>:如果定义了 flag 字符串变量,并且 初始化值是 " " ,空字符串,这个时候需要分析:由于点击了 显示ListView数据的Activity的 "+" 加号之后,跳转到下一个Activity,然后点击返回键,发现数据重复,是因为 只要返回到当前 Activity,就会执行 onResume()方法,就会去调用接口返回list,然后给 listview填充数据,因为调用接口传递的 flag参数,初始值是 " " ,空字符串,在第一次调用接口后,flag的值就已经变了,就变成了 "0,1,2" 这样的字符串了,要想 listview 页面数据不重复,就每次在点击 "+" 加号时候 把 flag置为空字符串,即就是:flag = " " ;

4. 总结

无论是 ListView列表页面的数据重复还是其他页面数据重复,只要有数据重复,自己需要考虑是否定义过: flag字符串、allList 集合、是否用sp存储数据、是否用sqlite数据库存储数据等等:

1>:如果定义 flag字符串:

在做了某些操作之后,导致数据重复,就在做的那个操作时把 flag 恢复初始状态,把 flag置为空字符串,flag = " " ;

2>:如果定义 allList 集合:

在做了某些操作之后,导致数据重复,就需要在添加数据之前,首先把 allList集合清空,allList.clear(),然后在 allList.addAll(list);

3>:如果用sp保存某个字段:

在做了某些操作之后,导致数据重复,可能就需要把 sp 中之前保存的某个值 清空即可;

4>:如果用sqlite数据库保存某些数据:

在做了某些操作之后,导致数据重复,可能是把数据删除了,但是 该字段的id没有删除等;

你可能感兴趣的:(调用接口后Activity或者Fragment的listview数据重复)