I am making a splash screen for my app. While loading of the splash screen I wanted to check if user is logIn or not.
If user is Login then i want to show him main activity and if not Login then i wanted to redirect him to the LoginActivitiy.
I am using firebase as my backend and i am checking the user on the Asynctask. This thing i have seen at here.
I have added the FirebaseAuth listener in onStart().
I have understood that why it is giving me error but i don't understand where to add it so that my app runs fine.
if Anyone could help me out OR give some better suggestion to do the same will be helpfull.
Thanks in adavance..
MainActivity.java
public class MainActivity extends AppCompatActivity {
private FirebaseDatabase mDataBase;
private DatabaseReference mUserDatabase;
protected FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
private String mCurrentUser;
private static int SPLASH_TIME_OUT = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome_screen);
mDataBase = FirebaseDatabase.getInstance();
mUserDatabase = mDataBase.getReference("users");
mUserDatabase.keepSynced(true);
startProcessing();
}
private void startProcessing() {
new userCheckOperation().execute();
}
protected void userIsLogIn() {
mAuth = FirebaseAuth.getInstance();
mAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if (firebaseAuth.getCurrentUser() == null) {
Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
//user won't go back
loginIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(loginIntent);
finish();
}
}
};
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthStateListener);
}
private void checkUserExists() {
if (mAuth.getCurrentUser() != null) {
mCurrentUser = mAuth.getCurrentUser().getUid();
mUserDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.hasChild(mCurrentUser)) {
Intent setupIntent = new Intent(MainActivity.this, SetupActivity.class);
//user won't go back
setupIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(setupIntent);
finish();
} else {
if (mCurrentUser.equals("nKnlkU2fWGeLlP2QDc8CLz21Fet1")) {
Intent admin_mainIntent = new Intent(MainActivity.this, AdminMainActivity.class);
//user won't go back
admin_mainIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(admin_mainIntent);
finish();
} else {
Intent user_mainIntent = new Intent(MainActivity.this, UserMainActivity.class);
//user won't go back
user_mainIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(user_mainIntent);
finish();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onStop() {
super.onStop();
if (mAuthStateListener != null) {
mAuth.removeAuthStateListener(mAuthStateListener);
}
}
private class userCheckOperation extends AsyncTask<Void,Void,Void>{
@Override
protected Void doInBackground(Void... voids) {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.interrupted();
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
userIsLogIn();
checkUserExists();
}
}
}
Log
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.lenovo.jdstudio, PID: 17986
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lenovo.jdstudio/com.example.lenovo.jdstudio.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5333)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.lenovo.jdstudio.MainActivity.onStart(MainActivity.java:94)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
at android.app.Activity.performStart(Activity.java:5353)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2340)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5333)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
at dalvik.system.NativeStart.main(Native Method)