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;
}
}