I tried saving shared preferences at 2 places, One is working other is not. Why it so?

46 Views Asked by At

I am stuck in a strange problem that is when i save data from 1 activity (Parent Page) it saves data. and on reload app it loads the saved preferences and user don't have to sign in again and again. But when i tried to do this with child it didn't helped :(

Here is my code for Parent:

class SignIn : AppCompatActivity() {
    private val sharedPrefFile = Common.APP_NAME
    private var auth: FirebaseAuth = Firebase.auth
    private lateinit var usertype: String
    val db = Firebase.firestore
    lateinit var etEmail: String
    lateinit var etPassword: String

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sign_in)
        getData()
        _sign_in_as.setText("signing in as " + usertype)


        //SignIn button
        _btn_sign_in.setOnClickListener{
            etEmail = _sign_in_email.text.toString()
            etPassword =_sign_in_password.text.toString()
            AuthenticateUser(etEmail,etPassword)
        }

        //Signup Link

        _sign_in_screen_sign_up_link.setOnClickListener{
            //Creating Intent
            val intent = Intent(this, ParentSignup::class.java)
            startActivity(intent)
        }
    }

    private fun AuthenticateUser(email: String, password: String){
        _progressBar.visibility= View.VISIBLE
        _progressBar.visibility= View.INVISIBLE
        auth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithEmail:success")
                    db.collection(USER_COLLECTION)
                        .whereEqualTo(USER_EMAIL,email)
                        .get()
                        .addOnSuccessListener { documents ->
                            for (document in documents){
                                val intent = Intent(this, TabbedActivity::class.java)
                                //Saving UserType in Shared Preferences
                                val sharedPreferences: SharedPreferences = getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE)
                                val sharedPref: SharedPreferences.Editor = sharedPreferences.edit()
                                //Email
                                sharedPref.putString(USER_EMAIL, document.data[USER_EMAIL].toString())
                                sharedPref.apply()
                                //username
                                sharedPref.putString(USER_NAME, document.data[USER_NAME].toString())
                                sharedPref.apply()
                                //number
                                sharedPref.putString(USER_PHONE, document.data[USER_PHONE].toString())
                                sharedPref.apply()
                                //number
                                sharedPref.putString(Common.LOGIN_STATUS, Common.LOGGED_IN)
                                sharedPref.apply()

                                Common.userName = document.data[USER_NAME].toString()
                                Common.userEmail = document.data[USER_EMAIL].toString()
                                Common.userPhone = document.data[USER_PHONE].toString()

                                startActivity(intent)
                                finishAffinity()
                            }
                        }

                } else {
                    _progressBar.visibility= View.INVISIBLE
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInWithEmail:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed." + (task.getException()?.message
                        ?: ""),
                        Toast.LENGTH_SHORT).show()
                }
            }
    }


    fun getData(){
        val sharedPreferences: SharedPreferences = getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE)
        val sharedPref: SharedPreferences =  sharedPreferences
        usertype = sharedPref.getString(USER_TYPE, "").toString()
    }
}

Here is code for Child:

class ChildSignup : AppCompatActivity() {

    private val sharedPrefFile = Common.APP_NAME
    private lateinit var auth: FirebaseAuth
    val db = Firebase.firestore
    private val TAG = "testTag"
    private lateinit var code: String

    @RequiresApi(Build.VERSION_CODES.O)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_child_signup)
        auth = Firebase.auth

        //Linking Parent Email
        _btn_link_child.setOnClickListener {
            verifyParentEmail()
        }

        //Verifying Email
        _btn_sign_up_verify.setOnClickListener{
            saveInSharedPreferences()
            linkChild()
        }

        _child_sign_up_parent_link.setOnClickListener{
            val intent = Intent(this, SignIn::class.java)
            startActivity(intent)
            finishAffinity()
        }
    }

    private fun saveInSharedPreferences() {
        //Saving UserType in Shared Preferences
        val sharedPreferences: SharedPreferences = getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE)
        val sharedPref: SharedPreferences.Editor = sharedPreferences.edit()
        //Email
        sharedPref.putString(USER_EMAIL, _link_child_email.text.toString())
        sharedPref.apply()
        //username
        sharedPref.putString(USER_NAME, _link_child_name.text.toString())
        sharedPref.apply()
        //number
        sharedPref.putString(USER_PHONE, "03154970584")
        sharedPref.apply()
        //number
        sharedPref.putString(LOGIN_STATUS, LOGGED_IN)
        sharedPref.apply()
        //userType
        sharedPref.putString(USER_TYPE, USER_TYPE_CHILD)
        sharedPref.apply()

        Common.userType = USER_TYPE_CHILD
        Common.userEmail = _link_child_email.text.toString()
        Common.userName = _link_child_name.text.toString()

        Toast.makeText(this, sharedPreferences.getString(USER_EMAIL, ""), Toast.LENGTH_SHORT).show()
        Toast.makeText(this, sharedPreferences.getString(USER_NAME, ""), Toast.LENGTH_SHORT).show()
        Toast.makeText(this, sharedPreferences.getString(USER_TYPE, ""), Toast.LENGTH_SHORT).show()
    }

    private fun verifyParentEmail() {
        var flag = false
        code =(100000..999999).random().toString()
        Log.d("TAG:", code)
        Toast.makeText(this, code, Toast.LENGTH_LONG).show()

        auth.fetchSignInMethodsForEmail(_link_child_email.text.toString()).addOnSuccessListener(this) { task ->
            if (!task.signInMethods?.isEmpty()!!){
                db.collection(LINKED_CHILDS)
                    .whereEqualTo(USER_EMAIL,_link_child_email.text.toString())
                    .get()
                    .addOnSuccessListener { documents ->
                        for (document in documents){
                            if (document[USER_NAME] == _link_child_name.text.toString()){
                                flag = true
                            }
                        }

                        if (flag == true){
                            Toast.makeText(this, "This child is already linked with this parent!\nPlease verify code to continue", Toast.LENGTH_SHORT)
                                .show()
                        }
                        sendEmail(_link_child_email.text.toString(),
                            _link_child_name.text.toString(),
                            code,
                            "Email Verification Code"
                        )
                        _child_signup_verify_layout.isVisible = true
                    }
            }
            else{
                Toast.makeText(this, "No Such parent found", Toast.LENGTH_SHORT)
                    .show()
            }
        }
    }

    @RequiresApi(Build.VERSION_CODES.O)
    private fun linkChild() {
        if (_sign_up_six_digit_code.text.toString() == code){
            saveToCloud()
        }
    }

    @RequiresApi(Build.VERSION_CODES.O)
    private fun saveToCloud() {
        val thread = Thread {
            try {
                //Your code goes here
                val user = hashMapOf(
                    USER_TYPE to USER_TYPE_CHILD,
                    USER_EMAIL to _link_child_email.text.toString(),
                    USER_NAME to _link_child_name.text.toString(),
                    TOKEN to "" ,
                    DATE to LocalDate.now().toString(),
                    DAY to LocalDate.now().dayOfWeek.toString()
                )

                db.collection(Common.LINKED_CHILDS).add(user).addOnSuccessListener { documentReference ->
                    Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
                    //Moving to Next Screen
                    val intent = Intent(this, TabbedActivity::class.java)
//                    intent.putExtra(USER_TYPE, USER_TYPE_CHILD)
                    startActivity(intent)
//                    finishAffinity()
                }.addOnFailureListener { e ->
                    Log.w(TAG, "Error adding document", e)
                }

            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
        thread.start()
        Log.d("Thread status: ", "Started")
    }
}

And I am checking preferences here:

class MainActivity : AppCompatActivity() {
    private val sharedPrefFile = Common.APP_NAME

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val sharedPreferences: SharedPreferences = getSharedPreferences(sharedPrefFile, Context.MODE_PRIVATE)
        //UserType

        Toast.makeText(this, sharedPreferences.getString(USER_TYPE, "1"), Toast.LENGTH_SHORT).show()
        Toast.makeText(this, sharedPreferences.getString(USER_EMAIL, "2"), Toast.LENGTH_SHORT).show()
        Toast.makeText(this, sharedPreferences.getString(USER_NAME, "3"), Toast.LENGTH_SHORT).show()

        if (sharedPreferences.getString(USER_TYPE, "") == "" || sharedPreferences.getString(
                USER_EMAIL, "") == "" || sharedPreferences.getString(USER_NAME, "") == ""){
            Handler(Looper.getMainLooper()).postDelayed({
                val intent = Intent(this, WelcomeScreen::class.java)
                startActivity(intent)
                finish()
            },2000)
        }
        else{
            userType = sharedPreferences.getString(USER_TYPE, "").toString()
            userEmail = sharedPreferences.getString(USER_EMAIL, "").toString()
            userName = sharedPreferences.getString(USER_NAME, "").toString()
            val intent = Intent(this, TabbedActivity::class.java)
            startActivity(intent)
            finishAffinity()
        }
    }
}
0

There are 0 best solutions below