gpt4 book ai didi

android - SharedPreferenceListener 中的 CalledFromWrongThreadException

转载 作者:行者123 更新时间:2023-11-29 16:16:38 27 4
gpt4 key购买 nike

我有一个 IntentService 可以像这样更新偏好:

SharedPreferences.Editor editor = userPrefs.edit();
editor.putInt("COUNT", intCount);
editor.commit();

在我的主要 Activity 中,我正在监听偏好更改并更新 TextView

userPrefsListener = new SharedPreferences.OnSharedPreferenceChangeListener() {

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

if(key.equals("COUNT")) {

final TextView txvCounter = (TextView) findViewById(R.id.TXV_COUNTER);

if(txvCounter != null) {

SharedPreferences userPrefs = getSharedPreferences("USER_SCORE", 0);
int intCount = userPrefs.getInt("COUNT", 0);
txvFishcounter.setText(String.format("%03d",intCount));
}
}
}
};

userPrefs.registerOnSharedPreferenceChangeListener(userPrefsListener);

对于 Android 2.3,一切正常,但对于 2.2,每次触发 OnSharedListener 时我都会收到 CalledFromWrongThreadException。

感谢您的帮助!

最佳答案

运行 onSharedPreferenceChanged() 回调的线程不是 2.2 设备中的主 UI 线程,它给你 CalledFromWrongThreadException(因此违反了 Android UI thread access rules 的第二个)仅从 UI 线程调用 UI 工具包)。让代码在 UI 线程上运行的一种直接方法是使用 Activity.runOnUiThread() .这可以简单地通过将代码主体包装在一个新的 Runnable 中来完成:

activity.runOnUiThread(new Runnable() {
public void run() {
// Code which updates UI controls goes here.
}
});

关于 2.2 和 2.3 之间变化的简短讨论以及它为什么发生的代码 fragment 可以找到 here .

关于android - SharedPreferenceListener 中的 CalledFromWrongThreadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8908148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com