You were using SharedPreferences  the wrong way 🤔 
Tags: android, mvvm, sharedpreferences, viewmodel
Published: 2020-11-06 11:40:26

Let's keep it easy and simple 
#Shared preferences
Shared preferences allow you to store small amounts of primitive data as key/value pairs in a file on the device

* keep track of small bits of important
* Store information without needing a storage permission

# SharedPreferences easy explanation 
**VIDEO  [CLICK LINK](https://www.youtube.com/watch?v=0NTL4Z6DR8U)**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/zcytujorrrgqocohxxx8.PNG)

## MainActivity Code
```
public class MainActivity extends AppCompatActivity {
    TextView sharedPref;
    Button buttonAdd;
    int count=0;

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

        SharedPreferences sp = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE);
        count = sp.getInt("your_int_key", -1);


        sharedPref=findViewById(R.id.sharedPref);
        buttonAdd=findViewById(R.id.buttonAdd);
        sharedPref.setText(""+count);

        buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count++;
                sharedPref.setText(""+count);

                SharedPreferences sp = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE);
                SharedPreferences.Editor editor = sp.edit();
                editor.putInt("your_int_key", count);
                editor.commit();
            }
        });

    }
}
```
# Lets Upgrade to PreferenceUtil 
###you must be thinking why PreferenceUtil 🤔 , let's see why should we use this.
1) Much cleaner and readable code.
2) Can access any variable from any class.

 --> To get the value 
```PreferenceUtil.getInstance(MainActivity.this).getCountNum(); ```
 --> To set the value ```PreferenceUtil.getInstance(MainActivity.this).SetCountNum(count); ```

3) Code is reduced.
4) Variables using shared preferences are in one place.
5) Fewer errors due to key naming.
6) Easy to use with ViewModel.
7) Very good for you to handle large projects.
##I hope these advantages are good enough for you to migrate😎. 

**VIDEO  [CLICK LINK](https://youtu.be/7t9MM7Ctmi4)**
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7cjn5fuhahv7w955cewl.PNG)
# MainActivity Code
```
package com.androxus.prefranceutil;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;


import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView sharedPref;
    Button buttonAdd;
    int count=0;


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


        sharedPref=findViewById(R.id.sharedPref);
        buttonAdd=findViewById(R.id.buttonAdd);


//        SharedPreferences sp = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE);
//        count = sp.getInt("your_int_key", -1);
        count=PreferenceUtil.getInstance(MainActivity.this).getCountNum();


        sharedPref.setText(""+count);
        buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count++;
                sharedPref.setText(""+count);
                PreferenceUtil.getInstance(MainActivity.this).SetCountNum(count);


//                SharedPreferences sp = getSharedPreferences("your_prefs", Activity.MODE_PRIVATE);
//                SharedPreferences.Editor editor = sp.edit();
//                editor.putInt("your_int_key", count);
//                editor.commit();
            }
        });

    }
}
```
#PreferenceUtil class code
```
package com.androxus.prefranceutil;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

public class PreferenceUtil {


    public static final String COUNT_VALUE = "count_value";
    public static final String COUNT_NUM = "count";
    private static com.androxus.prefranceutil.PreferenceUtil sInstance;
    private SharedPreferences mPref;
    private SharedPreferences.Editor mEditor;

    private PreferenceUtil(final Context context) {
        mPref = PreferenceManager.getDefaultSharedPreferences(context);
    }
    public static com.androxus.prefranceutil.PreferenceUtil getInstance(final Context context) {
        if (sInstance == null)
            sInstance = new com.androxus.prefranceutil.PreferenceUtil(context.getApplicationContext());
        return sInstance;
    }

    public final int getCountNum() {
        return mPref.getInt(COUNT_NUM,0);
    }

    public final int getCount() {
        return mPref.getInt(COUNT_VALUE,0);
    }

    public void setCount(int count) {
        final SharedPreferences.Editor editor = mPref.edit();
        editor.putInt(COUNT_VALUE, count);
        editor.apply();
    }

    public void SetCountNum(int count) {
        final SharedPreferences.Editor editor = mPref.edit();
        editor.putInt(COUNT_NUM, count);
        editor.apply();
    }
}
```
#ENJOY HOPE YOU LIKE😁 
##If you have any suggestion please let me know on the details below.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/j2gc3apoxacjx90ubvyu.png)
###Contact us
androxus.app@gmail.com
https://www.instagram.com/androxus.insta/

###Our Work
[androxus](https://https://play.google.com/store/apps/dev?id=5382873575159685610)
###Author Linkedin
[Linkedin](https://https://www.linkedin.com/in/ghanim-khan-713a09131/)