I just got an NPE error in SharedPreference, where the value for int is null. Can you help giving solutions or suggestions?
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference at com.example.gmfadmin.utils.SessionManagement.(SessionManagement.java:27) at com.example.gmfadmin.core.dashboard.peserta.PesertaPrsenter.(PesertaPrsenter.java:27) at com.example.gmfadmin.core.dashboard.peserta.PesertaActivity.initComponent(PesertaActivity.java:50) at com.example.gmfadmin.core.dashboard.peserta.PesertaActivity.onCreate(PesertaActivity.java:45) at android.app.Activity.performCreate(Activity.java:5990) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
public class SessionManagement {
    private SharedPreferences mSharedPreferences;
    private SharedPreferences.Editor mEditor;
    private Context mContext;
    private static final String session_name    = "gmf";
    private static final String is_login   = "islogin";
    private static final String key_username = "keyusername";
    public static final String key_token    = "keytoken";
    public SessionManagement(Context mContext) {
        this.mContext = mContext;
        mSharedPreferences  = mContext.getSharedPreferences(session_name, MODE_PRIVATE);
        mEditor = mSharedPreferences.edit();
    }
    public void createSession(String username, String token){
        mEditor.putBoolean(is_login, true);
        mEditor.putString(key_username, username);
        mEditor.putString(key_token, token);
        mEditor.commit();
    }
    public void checkAuth(){
        if (this.is_login()){
            // Isset Authentication Data
            Intent intent   = new Intent(mContext, DashboardActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            mContext.startActivity(intent);
        }
    }
    public boolean is_login(){
        return mSharedPreferences.getBoolean(is_login, false);
    }
    public void logout(){
        mEditor.clear();
        mEditor.commit();
    }
    public HashMap<String, String> getUserDetails(){
        HashMap<String, String> user    = new HashMap<String, String>();
        user.put(key_token, mSharedPreferences.getString(key_token, null));
        user.put(key_username, mSharedPreferences.getString(key_username, null));
        return user;
    }
}
Activity
public class PesertaActivity extends AppCompatActivity implements PesertaView {
    private List<Peserta> pesertas;
    private PesertaPrsenter prsenter;
    @Nullable
    @BindView(R.id.menu_peserta)
    RecyclerView menu_peserta;
    @Nullable
    @BindView(R.id.progres_bar)
    ProgressBar progressBar;
    public PesertaActivity(){
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ButterKnife.bind(this);
        setContentView(R.layout.activity_peserta);
        initComponent();
        prsenter.loadPeserta();
    }
    private void initComponent() {
        prsenter   = new PesertaPrsenter(this);
        pesertas   = new ArrayList<>();
        menu_peserta.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
        menu_peserta.setItemAnimator(new DefaultItemAnimator());
    }
    @Override
    public void loadPeserta(ResponsePeserta peserta) {
        pesertas = peserta.getPeserta();
        menu_peserta.setAdapter(new PesertaAdapter(getApplicationContext(), pesertas,R.layout.list_menu_peserta));
    }
    @Override
    public void loadPesertaError(String message) {
        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
    }
    @Override
    public void showLoading() {
        assert progressBar != null;
        progressBar.setVisibility(View.VISIBLE);
    }
    @Override
    public void hideLoading() {
        assert progressBar != null;
        progressBar.setVisibility(View.GONE);
    }
}
Presenter
public class PesertaPrsenter {
    private static final String TAG = PesertaPrsenter.class.getSimpleName();
    PesertaView view;
    private SessionManagement mSessionManagement;
    private CompositeDisposable compositeDisposable;
    private HashMap<String, String> user;
    public PesertaPrsenter(PesertaView view){
        this.view  = view;
        mSessionManagement = new SessionManagement(BaseApps.getAppContext());
        loadToken();
    }
    private void loadToken() {
        if (mSessionManagement != null)
            user    = mSessionManagement.getUserDetails();
    }
    public void loadPeserta(){
        view.showLoading();
        RequestAPI requestAPI = NetworkClient.getRetrofit().create(RequestAPI.class);
        if (compositeDisposable == null)
            compositeDisposable = new CompositeDisposable();
        compositeDisposable.add(requestAPI.infopeserta(
                user.get(SessionManagement.key_token).toString().trim())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.single())
                .subscribe(
                        peserta -> handleResponse(peserta),
                        throwable -> handleError(throwable)
                )
        );
    }
    private void handleResponse(ResponsePeserta peserta){
        view.loadPeserta(peserta);
        view.hideLoading();
    }
    private void handleError(Throwable throwable){
        view.loadPesertaError(throwable.getLocalizedMessage().toString());
        Log.d(TAG,"handleError: "+throwable.toString());
        Log.d(TAG,"handleError "+user.get(SessionManagement.key_token).toString().trim());
        view.hideLoading();
    }
    public void destroyData(){
        if (compositeDisposable != null)
            compositeDisposable.dispose();
    }
}
View
public interface PesertaView {
    void loadPeserta(ResponsePeserta peserta);
    void loadPesertaError(String message);
    void showLoading();
    void hideLoading();
}
BaseApps
public class BaseApps extends Application {
    private static Context context;
    @Override
    public void onCreate(){
        super.onCreate();
        BaseApps.context    = getApplicationContext();
    }
    public static Context getAppContext(){
        return BaseApps.context;
    }
}
 
     
    