Parsania Hardik
Parsania Hardik

Reputation: 4623

android - Shared Preference not updating after closing app

I am using following code to add preference in onStop() and retrieving in onActivityCreated() .Everything works fine but after killing the app sharedpreference is not updating its value and a value inserted first time after installing app is remain all the time.

code:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    SharedPreferences appdata = PreferenceManager.getDefaultSharedPreferences(this.getActivity());

    etA.setText(appdata.getString("A", ""));
    etB.setText(appdata.getString("B", ""));
}

@Override
public void onStop() {
    super.onStop();

    SharedPreferences appdata = PreferenceManager.getDefaultSharedPreferences(this.getActivity());
    SharedPreferences.Editor editor = appdata.edit();
    editor.putString("A", etA.getText().toString());
    editor.putString("B", etB.getText().toString());
    editor.commit();
}

Upvotes: 0

Views: 172

Answers (1)

Sagar Trehan
Sagar Trehan

Reputation: 2446

Create an Activity that which contains a fragment:

public class MainActivity extends AppCompatActivity {

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

        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.content_layout, new ContentFragment())
                .commit();
    }

    public static class ContentFragment extends Fragment {

        EditText etA, etB;

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.main_fragment, container, false);
            etA = (EditText) view.findViewById(R.id.et_a);
            etB = (EditText) view.findViewById(R.id.et_b);
            return view;
        }

        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            SharedPreferences appdata = PreferenceManager.getDefaultSharedPreferences(getActivity());
            etA.setText(appdata.getString("A", ""));
            etB.setText(appdata.getString("B", ""));
        }

        @Override
        public void onStop() {
            super.onStop();
            SharedPreferences appdata = PreferenceManager.getDefaultSharedPreferences(getActivity());
            SharedPreferences.Editor editor = appdata.edit();
            editor.putString("A", etA.getText().toString());
            editor.putString("B", etB.getText().toString());
            editor.commit();
        }
    }
}

Fragment layout file:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et_a"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/et_b"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

I tested this code and its working perfectly for me. Please check and let us know what you are doing wrong?

Upvotes: 1

Related Questions