在回收器视图上拉取参考后存储在首选项中的重复记录



我正在使用PullToRefresh进行RecyclerView。每次在回收器视图上显示新数据时,它都会存储在SharedPreference中。如果互联网连接消失,我将显示来自SharedPreferenceRecyclerView数据。当多次执行 PullToRefresh 时,来自 Recyclerview 的相同数据存储在首选项中。当 Internet 连接消失并且从首选项获取数据时,它会在 Recyclerview 中显示重复记录。如何避免这种情况?
这是用于PullToRefresh的代码

pullRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
current.clear();
adapter.notifyDataSetChanged();
pullRefresh.setRefreshing(true);
adapter.notifyDataSetChanged();
checkInternet();
}
}, 1000);  
}
});  

这是checkInternet的代码。如果互联网可用,则从网络服务中获取最新数据并存储在Preferene中,否则从首选项中获取数据

public void checkInternet(){
String NetworkStatus = biz.fyra.bookapp.utils.NetworkStatus.checkConnection(getContext());
if (NetworkStatus.equals("false")) {
current.clear();
String 1stJSON = firstStatus.getString("firstList", "");
String 2ndJSON = secondData.getString("secondListList", "");
if (!1stJSON.equals("") && !2ndJSON.equals("")) {
try {
readCachedData(1stJSON, 2ndJSON);
} catch (JSONException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
snackbar=Snackbar.make(recyclerView,"You are Offline.",
Snackbar.LENGTH_INDEFINITE).setAction("Retry", new View.OnClickListener() {
@Override
public void onClick(View v) {
checkInternet();
}
});
snackbar.show();
}else{
current.clear();
getData();
} 
}  

getData是实际的 Web 服务调用。如何解决这个问题?

解决方案:

只需添加此行:

adapter.notifyDataSetChanged();

在下面提到的(写在这里(:

public void checkInternet(){
String NetworkStatus = biz.fyra.bookapp.utils.NetworkStatus.checkConnection(getContext());
if (NetworkStatus.equals("false")) {
current.clear();
........... (Write here)
String 1stJSON = firstStatus.getString("firstList", "");
String 2ndJSON = secondData.getString("secondListList", "");
......
......

试试吧。

还有一件事,

pullRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
current.clear();
adapter.notifyDataSetChanged();
pullRefresh.setRefreshing(true);
adapter.notifyDataSetChanged(); 
checkInternet();
}
}, 1000);  
}
});  

在上面的代码中删除adapter.notifyDataSetChanged();中的任何一个

无需添加两次。

最新更新