0

I am new at this Kotlin language when doing Android Studio and I was working on the code and I was stuck on how to combine Shared Preferences with data structures such as (Array List) though so that I can store an array of data. I was wondering if there any way how I can able to do solve this problem? Any suggestion?

class CreateAccount : AppCompatActivity() {
private lateinit var btnCreateAccount: Button
private lateinit var userName : EditText
private lateinit var fullName: EditText
private lateinit var email: EditText
private lateinit var password: EditText
private lateinit var confirmPassword: EditText

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

    btnCreateAccount= findViewById(R.id.buttonCreateAccount)
    email = findViewById(R.id.editTextEmailAddress)
    confirmPassword = findViewById(R.id.editConfirmPassword)
    password = findViewById(R.id.editPassword)
    userName = findViewById(R.id.editTextUserName)
    fullName = findViewById(R.id.editTextPersonName)



    btnCreateAccount.setOnClickListener {
        validateEmptyForm()
    }
}

private fun validateEmptyForm(){
    if(fullName.text.toString().isNotEmpty() && userName.text.toString().isNotEmpty() && email.text.toString().isNotEmpty() && password.text.toString().isNotEmpty() && confirmPassword.text.toString().isNotEmpty()){
        //Need a valid Email to work (ex. abc123@gmail.net)
        if(email.text.toString().matches(Regex("[a-zA-Z0-9._]+@[a-z].+[a-z]"))) {
            if (password.text.toString() == confirmPassword.text.toString()) {
                Toast.makeText(this, "Created Account Successful!", Toast.LENGTH_LONG).show()
                saveData()

                val intent = Intent(this,MainActivity::class.java)
                startActivity(intent)
            }

        }
        else{
            email.setError("Please Enter a Valid Email")

        }
    }
    else{
        Toast.makeText(this,"Need to All Information",Toast.LENGTH_SHORT).show()
    }
}


private fun saveData(){
//Save user Info, but not stored?
    val sharedPref = getSharedPreferences("UserAccount",Context.MODE_PRIVATE)
    val edit = sharedPref.edit()

    edit.putString("Name", fullName.text.toString())
    edit.putString("User Name", userName.text.toString())
    edit.putString("Email",email.text.toString())
    edit.putString("Password",password.text.toString())

    edit.apply()


    Toast.makeText(this,"Data has been saved",Toast.LENGTH_LONG).show()

}



}
Simulant
  • 19,190
  • 8
  • 63
  • 98
Nick
  • 1
  • 1
  • You can use a serialization library to turn objects into JSON strings and back, and then store them in SharedPreferences as a String. But if you find that you're doing this extensively, you likely should be using a different means of saving data that intended for more complicated data, such as a database. – Tenfour04 Oct 13 '22 at 00:11

2 Answers2

0

What Tenfour04 said. yup

This is extension I did for class(Mood) objects:

fun preferenceToObject(MOOD_DAY_PREFERENCE: String ): Mood {
        moodSharedPref = getSharedPreferences(FILE_NAME, AppCompatActivity.MODE_PRIVATE)

        val moodJsonString = moodSharedPref.getString(MOOD_DAY_PREFERENCE, null)
        dayMoodObject = Gson().fromJson<Mood>(moodJsonString, Mood::class.java)

       return dayMoodObject
    }

    fun objectToPreference(mood: Mood,PREFERENCE_NAME:String){
        moodSharedPref = getSharedPreferences(FILE_NAME, MODE_PRIVATE)
        val moodSharedPrefEditor = moodSharedPref.edit()

        val moodJsonString = Gson().toJson(mood)

        moodSharedPrefEditor.putString(PREFERENCE_NAME,moodJsonString).apply()
-1

There are 3 ways to store data on android.

Each way has different strengths and weaknesses

Method 1: Store through share preference

How do you save/store objects in SharedPreferences on Android?

Method 2: Store through database room

https://developer.android.com/training/data-storage/room

https://github.com/googlecodelabs/android-room-with-a-view

Method 3: Online storage of this requires a server

Đốc.tc
  • 530
  • 4
  • 12
  • There are more ways, and I would only use Room for relational data. Single credentials are not relational. Downvoted for recommending SharedPreference considering it's outdated – Zun Oct 13 '22 at 07:27
  • @Zun, SharedPreferences is still a viable solution for very simple data. Not deprecated. The primary default way and only included way Jetpack Preferences currently stores data. There’s no clean way to use DataStore with Jetpack Preferences or in Java. So definitely not outdated…yet. Maybe the writing’s on the wall and it will be deprecated a couple of years from now, but it hasn’t happened yet and they are certainly the most beginner-friendly solution. – Tenfour04 Oct 13 '22 at 12:49
  • @Tenfour04 Java is outdated. Kotlin has become the de facto standard for 4 years now – Zun Oct 15 '22 at 17:58