-2

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;
    }
}
SatRac
  • 21
  • 7

1 Answers1

1

android.content.Context.getSharedPreferences(java.lang.String, int)' on a NPE - it means that your "mContext" is null in this string:

mSharedPreferences  = mContext.getSharedPreferences(session_name, MODE_PRIVATE);
Ashish
  • 6,791
  • 3
  • 26
  • 48
easy_breezy
  • 1,073
  • 7
  • 18
  • 1
    He asked: "I just got an NPE error in SharedPreference, where the value for int is null" and i answered him why he got this exception, and in which string the exception occured. The solution of this problem is obvious - make sure that the "mContext" passed in the constructor of SessionManagement is not null. – easy_breezy Jan 12 '20 at 16:00
  • I just edited my question. – SatRac Jan 13 '20 at 02:06
  • @Ashish Then he should do so. Strange question. – user207421 Jan 13 '20 at 07:24