Search code examples
androidandroid-sharedpreferences

Sharedpreferences not saving data when app restart


I'm trying to make "add favorites" button in my app. I can send and get value with sharedpreferences properly, but when I restart the app, favorites are empty again. I guess I need override OnPause method, but I couldn't apply properly. I need help, thanks in advance.

PLAYING RADIO FRAGMENT

public static int incrementedValue = 0;

add_favorites_button= (Button) view.findViewById(R.id.add_favorites_button);
        add_favorites_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                SharedPreferences settings = getActivity().getSharedPreferences("PREFS", 0);
                SharedPreferences.Editor editor = settings.edit();

                editor.putString("radio_link"+ incrementedValue, radio_play_link);
                editor.putString("radio_name" + incrementedValue, radio_name);
                editor.putString("listener_number" + incrementedValue, listener_number);
                //editor.clear();
                editor.commit();

                incrementedValue++;
            }

        });

FAVORITES FRAGMENT

final List<String> radio_name_list = new ArrayList<>();
        final List<String> radio_link_list = new ArrayList<>();
        final List<String> listener_numbers = new ArrayList<>();


        for (int i=0; i<PlayRadioFragment.incrementedValue; i++) {
            SharedPreferences settings = getActivity().getSharedPreferences("PREFS",0);
            radio_name_list.add(settings.getString("radio_name" +i, ""));
            radio_link_list.add(settings.getString("radio_link" +i, ""));
            listener_numbers.add(settings.getString("listener_number" +i, ""));
        }

... then I show them in listview ...


Solution

  • for (int i=0; i<PlayRadioFragment.incrementedValue; i++)
    

    After restarting the app (or Fragment), this incrementedValue will be back to what it was initialized with, probably 0, so you won't load anything from SharedPreferences (not entering the for-loop at all).

    Try something like

    for (int i=0; i<Integer.MAX_VALUE; i++) {
    
       String s = settings.getString("radio_name" +i, "")
    
       if (TextUtils.isEmpty(s))
          break; 
       } else {
          radio_name_list.add(s); 
       }
    

    You probably also want to avoid overwriting the old favorites after the app restart, so you have to set the incrementedValue after loading the favorites like

    incrementedValue = radio_name_list.size();