android - 如何保存从 Kotlin 中另一个活动传递的数据?
问题描述
我曾经将初始活动intent
传递给活动。第二个活动显示用户在前一个活动中输入的任何名称。用户登录后,我的代码会正确显示名称。但是,当我关闭应用程序时,名称显示为. 我的问题是如何在关闭并重新启动应用程序后继续显示名称。我已经在我的代码中实现了跟踪初始启动,因此,每次打开应用程序时,应用程序都不会提示输入名称。student name
StudentNameInput
StudentInitialActivity
null
shared preferences
StudentNameInput
活动:
class StudentNameInput : AppCompatActivity(), View.OnClickListener {
private lateinit var sharedPref: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedPref = getSharedPreferences("YOUR_PREF_NAME", Context.MODE_PRIVATE)
if (wasUserNameSaved()) {
val intent = Intent(this, StudentInitialActivity::class.java)
startActivity(intent)
finish()
return
}
setContentView(R.layout.activity_student_name_input)
btnStudentLogIn.setOnClickListener(this)
}
private fun validate(): Boolean {
if (txt_student_name.text.toString().isEmpty()) {
txt_student_name.error = "Name cannot be empty"
return false
}
return true
}
override fun onClick(v: View?) {
val editTextStudentName = findViewById<EditText>(R.id.txt_student_name);
when (v?.id) {
R.id.btnStudentLogIn -> {
if (validate()) {
Log.i(null, "setOnClickListener")
sharedPref.edit().putString("user_name", txt_student_name.text.toString())
.apply()
val studentName = editTextStudentName.text.toString();
val intent = Intent(this@StudentNameInput, StudentInitialActivity::class.java)
intent.putExtra("Name", studentName);
startActivity(intent)
}
}
}
}
private fun wasUserNameSaved(): Boolean {
return sharedPref.getString("user_name", "").isNotEmpty()
}
}
StudentInitialActivity
活动:
class StudentInitialActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_student_initial)
val intent = intent
val name = intent.getStringExtra("Name")
val studentNameTextView = findViewById<TextView>(R.id.textViewStudentName)
textViewStudentName.text = "Logged in as: " + name
btnScanForClasses.setOnClickListener {
Log.i(null, "setOnClickListener")
val intent = Intent(this, DeviceScanActivity::class.java)
startActivity(intent)
}
btnRecords.setOnClickListener {
startActivity(Intent(this, StudentRecords::class.java))
}
}
}
解决方案
由于您已经将用户名存储在 StudentNameInput 活动中,并且您在那里编写了一个条件来检查是否已经存储的名称直接用于 StudentInitialActivity。因此,您缺少获取存储名称的信息,我会建议您使用此解决方案-
在 StudentNameInput 中,将用户名添加到此块中的意图
if (wasUserNameSaved()){
val intent = Intent(this, StudentInitialActivity::class.java)
intent.putExtra("Name", sharedPref.getString("YOUR_PREF_NAME", ""))
startActivity(intent)
finish()
return
}
推荐阅读
- javascript - 获取 TypeError:o 不是 trsetState 的函数
- javascript - 我如何在 apollo 中使用 graphQL 模拟连接以进行测试?
- varnish - 清漆丢失和重新获取日志 - 连接断开
- reactjs - 如何防止 Tailwind 在聚焦时更改文本输入字段的边框?
- php - 从 SFTP 打开 csv 文件并将文件内容提取到 php 数组中
- javascript - 异步 thunk 模式
- python - 如何在 Python 中使用 str.replace() 函数将地址替换为只有数字和一些字母?
- flutter - Flutter 和 GetX:如何更新我的列表
在我看来? - php - 目录结构:纯 Javascript/PHP 中的简单应用程序前端/后端(无框架,或 CMS)
- javascript - 使用 JavaScript 获取的 HTML 组件不响应点击事件