Дублирующаяся запись, сохраненная в настройках после повторной загрузки в Recyclerview - PullRequest
0 голосов
/ 21 сентября 2018

Я использую PullToRefresh для RecyclerView. Каждый раз, когда новые данные отображаются в Recyclerview, они сохраняются в SharedPreference. Если подключение к Интернету отсутствует, я показываю данные на RecyclerView с SharedPreference. Когда PullToRefreshвыполняется несколько раз, одни и те же данные из Recyclerview сохраняются в Preference.And, когда подключение к Интернету пропадает, а данные выбираются из Preference, в 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 являются фактическими вызовами WebService.Как решить эту проблему?

1 Ответ

0 голосов
/ 21 сентября 2018

Решение:

Просто добавьте эту строку:

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();

Нет необходимости добавлять его дважды.

...