繁体   English   中英

当 Activity 从其他地方启动时,SharedPreferences 不起作用?

[英]SharedPreferences not working when Activity is started from somewhere else?

我有一个具有两个功能的 ThreadActivity,saveContacts 和 loadContacts。 他们都使用 sharedpreferences 和 Gson 来保存由称为 SimpleContacts 的对象组成的 ArrayList。 一旦我从其他地方启动 Activity,它就无法从 sharedpreferences 中检索数据。 (我尝试在保存后立即加载并且有效,但如果我关闭 Activity 并重新打开它就不行)

保存function:

private fun saveContact() {
        val gson = Gson()
        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext)
        try {
            val editor = sharedPreferences.edit()
            val json = gson.toJson(participants)
            editor.putString(threadId.toString()+"_Contact", json)
            editor.apply()
        } catch(e: Exception) {
            e.printStackTrace()
        }
}

负载 function:

private fun loadContact() {
        val gson = Gson()
        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext)
        val type = object : TypeToken<ArrayList<SimpleContact?>?>() {}.type
        try {
            val json = sharedPreferences.getString(threadId.toString()+"_Contact", "")
            participants = gson.fromJson(json, type)
        } catch(e: Exception) {
            e.printStackTrace()
        }
}

我有 2 个可以打开此 ThreadActivity 的活动,如果我从同一个活动开始,一切正常。 但是当我使用另一个 Activity 启动它时,sharedPrefs 是空的。

启动有效的活动(我不知道是不是因为它是构建 Intent 的方式,所以我会在这里写它们):

private fun launchThreadActivity(phoneNumber: String, name: String) {
        hideKeyboard()
        val text = intent.getStringExtra(Intent.EXTRA_TEXT) ?: ""
        val numbers = phoneNumber.split(";").toSet()
        val number = if (numbers.size == 1) phoneNumber else Gson().toJson(numbers)
        Intent(this, ThreadActivity::class.java).apply {
            putExtra(THREAD_ID, getThreadId(numbers))
            putExtra(THREAD_TITLE, name)
            putExtra(THREAD_TEXT, text)
            putExtra(THREAD_NUMBER, number)

            if (intent.action == Intent.ACTION_SEND && intent.extras?.containsKey(Intent.EXTRA_STREAM) == true) {
                val uri = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)
                putExtra(THREAD_ATTACHMENT_URI, uri?.toString())
            } else if (intent.action == Intent.ACTION_SEND_MULTIPLE && intent.extras?.containsKey(Intent.EXTRA_STREAM) == true) {
                val uris = intent.getParcelableArrayListExtra<Uri>(Intent.EXTRA_STREAM)
                putExtra(THREAD_ATTACHMENT_URIS, uris)
            }

            startActivity(this)
        }
}

启动不起作用的活动:

Intent(this, ThreadActivity::class.java).apply {
                        putExtra(THREAD_ID, (it as Conversation).threadId)
                        putExtra(THREAD_TITLE, it.title)
                        putExtra("fromMain", true)
                        startActivity(this)
}

没关系,这是我的错。 调用 saveContact 时,threadId 尚未初始化。 所以基本上钥匙总是不同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM