Bahar Azartoos
Bahar Azartoos

Reputation: 69

onsharedpreferencechangelistener not work in android app

I wrote this code that works with sharedPreference , in sosbutton I changed sharedPreference ,I want when sharedPreference changed , onsharedpreferencechangelistener fire . I wrote this code but onsharedpreferencechangelistener didn't fire.

 public class MainActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);


         final    SharedPreferences prefs = getSharedPreferences("demopref", Context.MODE_WORLD_READABLE);
            final Button sosBtn=(Button) findViewById(R.id.button);
            sosBtn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {



                    String data = prefs.getString("demostring", "No Value");

                    SharedPreferences.Editor editor = prefs.edit();
                    editor.putString("demostring","HI...");
                    editor.commit();


            ////////////////////////////////
                }
                });        

            SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
                public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {

                    Toast.makeText(getApplicationContext(),"changed : " + key,Toast.LENGTH_LONG).show();


                }
            };

            prefs.registerOnSharedPreferenceChangeListener(listener);
        }

    }

please help me :( thanks in advance

Upvotes: 1

Views: 1949

Answers (3)

Bahar Azartoos
Bahar Azartoos

Reputation: 69

I solved my problem:

  public class MainActivity  extends Activity {

        SharedPreferences pref;
        SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {

            @Override
            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                if(key.equals("demopref"))
                Toast.makeText(getApplicationContext(),"Hello2---"+key,Toast.LENGTH_LONG).show();

            }
        };

        @SuppressWarnings("deprecation")

        int i=0;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

            ////////////////////////////////////////

            final Button sosBtn = (Button) findViewById(R.id.button);
            sosBtn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    SharedPreferences.Editor editor = pref.edit();
                    editor.putString("demopref","HI"+String.valueOf(i));
                    i++;
                    editor.commit();
                    /////////////////////////////////

                }
            });



        }

        @Override
        protected void onResume() {
            pref.registerOnSharedPreferenceChangeListener(listener);

            super.onResume();
        }

        @Override
        protected void onPause() {
            pref.unregisterOnSharedPreferenceChangeListener(listener);

            super.onPause();
        }


    }

Upvotes: 1

Amit Basliyal
Amit Basliyal

Reputation: 870

Try this may be help you... your not given reference to your

SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {

here is my code

public class MainActivity extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


     final    SharedPreferences prefs = getSharedPreferences("demopref", Context.MODE_PRIVATE);
        final Button sosBtn=(Button) findViewById(R.id.button);
        sosBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {



                String data = prefs.getString("demostring", "No Value");

                SharedPreferences.Editor editor = prefs.edit();
                editor.putString("demostring","HI...");
                editor.commit();
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(listener);

        ////////////////////////////////
            }
            });        

         listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {

                Toast.makeText(getApplicationContext(),"changed : " + key,Toast.LENGTH_LONG).show();


            }
        };

        prefs.registerOnSharedPreferenceChangeListener(listener);
    }

}

Upvotes: 0

Lino
Lino

Reputation: 6160

MODE_WORLD_READABLE is deprecated, try MODE_PRIVATE

Upvotes: 0

Related Questions