I made an automatic login on Android, the code is below. But I get this error:
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.appsnipp.nbpresensi, PID: 14850 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appsnipp.nbpresensi/com.appsnipp.niasbaratepresensi.welcome_activity}: java.lang.ClassCastException: com.appsnipp.niasbaratepresensi.welcome_activity cannot be cast to com.appsnipp.niasbaratepresensi.DashboardActivity at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3454) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3593) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:140) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2126) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:264) at android.app.ActivityThread.main(ActivityThread.java:7684) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980) Caused by: java.lang.ClassCastException: com.appsnipp.niasbaratepresensi.welcome_activity cannot be cast to com.appsnipp.niasbaratepresensi.DashboardActivity at com.appsnipp.niasbaratepresensi.SessionManager.checkLogin(SessionManager.java:51) at com.appsnipp.niasbaratepresensi.welcome_activity.onCreate(welcome_activity.java:19) at android.app.Activity.performCreate(Activity.java:7817) at android.app.Activity.performCreate(Activity.java:7806) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3424) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3593) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:140) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2126) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:264) at android.app.ActivityThread.main(ActivityThread.java:7684) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:980) I/Process: Sending signal. PID: 14850 SIG: 9 Process 14850 terminated.
This my welcome activity code:
public class welcome_activity extends AppCompatActivity {
SessionManager sessionManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
sessionManager = new SessionManager(this);
sessionManager.checkLogin();
HashMap<String, String> user = sessionManager.getUserDetail();
String mNip = user.get(sessionManager.NIP);
if (mNip.equals(mNip)) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(welcome_activity.this, DashboardActivity.class);
startActivity(intent);
finish();
}
}, 2000);
} else {
Intent intent = new Intent(welcome_activity.this, LoginActivity.class);
startActivity(intent);
finish();
}
}
}
And this is my session manager:
public class SessionManager {
SharedPreferences sharedPreferences;
public SharedPreferences.Editor editor;
public Context context;
int PRIVATE_MODE = 0;
private static final String PREF_NAME = "LOGIN";
private static final String LOGIN = "IS_LOGIN";
public static final String NM_LENGKAP = "NM_LENGKAP";
public static final String NIP = "NIP";
public static final String PASSWORD = "PASSWORD";
public static final String JABATAN = "JABATAN";
public static final String OPD = "OPD";
public static final String GAMBAR = "GAMBAR";
public SessionManager(Context context) {
this.context = context;
sharedPreferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = sharedPreferences.edit();
}
public void createSession(String nm_lengkap, String nip, String password, String jabatan,String opd,String gambar) {
editor.putBoolean(LOGIN, true);
editor.putString(NM_LENGKAP, nm_lengkap);
editor.putString(NIP, nip);
editor.putString(PASSWORD, password);
editor.putString(JABATAN, jabatan);
editor.putString(OPD, opd);
editor.putString(GAMBAR, gambar);
editor.apply();
}
public boolean isLoggin() {
return sharedPreferences.getBoolean(LOGIN, false);
}
public void checkLogin() {
if (!this.isLoggin()) {
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);
((DashboardActivity) context).finish();
}
if (!this.isLoggin()) {
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);
((welcome_activity) context).finish();
}
if (!this.isLoggin()) {
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);
((Absen_Activity1) context).finish();
}
if (!this.isLoggin()) {
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);
((Absen_Activity2) context).finish();
}
if (!this.isLoggin()) {
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);
((UbahPwd) context).finish();
}
if (!this.isLoggin()) {
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);
((Lihat_Absen1) context).finish();
}
if (!this.isLoggin()) {
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);
((Lihat_Absen2) context).finish();
}
if (!this.isLoggin()) {
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);
((Sudah_Activity) context).finish();
}
if (!this.isLoggin()) {
Intent i = new Intent(context, LoginActivity.class);
context.startActivity(i);
((ProfileActivity) context).finish();
}
}
public HashMap<String, String> getUserDetail() {
HashMap<String, String> user = new HashMap<>();
user.put(NM_LENGKAP, sharedPreferences.getString(NM_LENGKAP, null));
user.put(NIP, sharedPreferences.getString(NIP, null));
user.put(PASSWORD, sharedPreferences.getString(PASSWORD, null));
user.put(JABATAN, sharedPreferences.getString(JABATAN, null));
user.put(OPD, sharedPreferences.getString(OPD, null));
user.put(GAMBAR, sharedPreferences.getString(GAMBAR , null));
return user;
}
public void logout() {
editor.clear();
editor.commit();
Intent i = new Intent(context, LoginActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Could someone tell me what is going on?
You're initializing
SessionManagerwithwelcome_activitycontext, but casting it toDashboardActivitycontext. That's why it is failing.Don't finish a context from within SessionManager (return a value, use it to finish inside calling activity)
Your
checkLoginfunction is boilerplate and has unsafe casting. You can try this:In SessionManager:
In activity: