You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中ImageView不更新/SharedPreferences未生效问题排查

问题:每日更换图片功能无法更新ImageView显示

问题描述

通过Receiver每24小时触发更换图片逻辑,修改SharedPreferences中存储的图片资源ID,通知能正常触发说明Receiver工作正常。但启动Activity时,ImageView始终显示默认的“出错”图片,日志无崩溃信息。

相关代码

Receiver代码

val quotes = arrayOf(R.drawable.i1, R.drawable.i2, R.drawable.i3, R.drawable.i5, R.drawable.i6, R.drawable.i7, R.drawable.i8, R.drawable.i9, R.drawable.i10, R.drawable.i11, R.drawable.i12, R.drawable.i13, R.drawable.i14, R.drawable.i15, R.drawable.i16, R.drawable.i17, R.drawable.i18, R.drawable.i19, R.drawable.i20, R.drawable.i21, R.drawable.i22, R.drawable.i23, R.drawable.i24, R.drawable.i25)
val quote = quotes.random()

val prefquotes = context.getSharedPreferences("save", AppCompatActivity.MODE_PRIVATE).edit()
prefquotes.putInt("Quotes", quote)
prefquotes.apply()

Qinsperation页面代码

val quote = sharedPreferences.getInt("Quote", 0)

setContentView(R.layout.qinsperational)

val imageView = findViewById<ImageView>(R.id.daily_image)

if (quote == 0) {
    imageView.setImageResource(R.drawable.oh_no)
}else{
    Log.d("Quote", "good")
    imageView.setImageResource(quote)
}

问题原因

SharedPreferences的键名不匹配:Receiver中存储数据用的键是"Quotes"(带s的复数形式),但Activity读取数据时用的键是"Quote"(不带s的单数形式),导致读取到的始终是默认值0,所以ImageView一直显示出错图片。

修复方案

只需统一两边的键名即可,二选一:

  1. 修改Receiver中的键名:
prefquotes.putInt("Quote", quote) // 将"Quotes"改为"Quote"
  1. 或者修改Activity中的键名:
val quote = sharedPreferences.getInt("Quotes", 0) // 将"Quote"改为"Quotes"

优化建议

为了避免后续再出现这类拼写错误,建议定义一个常量来存储键名,比如在全局类或对应文件中:

const val KEY_DAILY_IMAGE = "daily_image"

然后Receiver和Activity中都使用这个常量来读写SharedPreferences:

// Receiver中存储
prefquotes.putInt(KEY_DAILY_IMAGE, quote)

// Activity中读取
val quote = sharedPreferences.getInt(KEY_DAILY_IMAGE, 0)

内容的提问来源于stack exchange,提问作者Joshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:20:28