- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我已经看到很多关于这个主题的问题,但我对任何答案都不满意。 我希望它有一个 class ConnectionController implements Runnable 负责打开到服务器的连接,读取和
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon
当我按下按钮时,我不断收到 CalledFromWringThreadException。 我的程序是这样的: public class MainActivity extends Activity i
我正在创建一款使用 Sphero 机器人球的游戏。当游戏开始/恢复时,它会检查配对或连接的球。如果蓝牙关闭,或者没有配对球,它会隐藏连接窗口。如果有配对但未连接的球,则转到此功能。 // If the
我们从 Crashlytics 收到错误报告,影响了相当一部分用户(大约 10%)。这是一个 CalledFromWrongThreadException。 问题是我不知道是什么导致了这个问题,我自己
我有一个 Activity 启动然后创建一个新的 NetworkHandler 实例,在 NetworkHandler 中我在一个新线程上运行它,这样 UI 线程就不会被卡住。 NetworkHand
我在 ListView 中显示了网页下载百分比的进度条。 for(int i=0;i { int id; public UploadTask(int id) {
我有一个 IntentService 可以像这样更新偏好: SharedPreferences.Editor editor = userPrefs.edit(); editor.putInt("COU
我正在尝试使用 Kotlin 协程在后台运行一些繁重的工作。 但是我收到了这个错误信息, 'android.view.ViewRootImpl$CalledFromWrongThreadExcepti
我有一种感觉是我的计时器导致了这次崩溃。奇怪的是我似乎无法在模拟器中重现它,但我的 Play 控制台崩溃报告告诉我用户不断遇到此崩溃: android.view.ViewRootImpl$Called
我使用的是 this , 显示来自互联网的图像,但它会引发如下错误: 04-12 13:45:05.337: E/AndroidRuntime(27897): Caused by: android.v
我的 logcat 中出现错误,指出: java.net.UnknownHostException: apps.example.com 09-13 14:57:28.970: W/System.err
我是 Android 初学者,所以如果这是一个愚蠢的问题,请友善。 我正在尝试动态更新四个 TextView。每当我尝试更新它们时,程序就会崩溃。 我不明白“只有创建 View 层次结构的原始线程才能
我在编写的应用程序中遇到一个非常奇怪的问题。这可能很简单,我对服务、AsyncTasks 以及何时可以再次访问 UI 线程有一些误解。 该应用程序包含一个主要 Activity ,您可以通过该 Act
我正在按照 android 教程构建天气应用程序,但是当我尝试将 mTemperature TextView 设置为我从预测 API 获得的温度时,我收到此错误“android.view.ViewRo
我在做 Espresso 测试时出错 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original threa
我已经创建了一个可以从 Activity 中的任何地方访问的 Handler,并且还编写了一个方法来更轻松地调用处理程序: private Handler textFromBGThread = new
我正在为一个 Android 应用开发一个测试类,我收到了一个 android.view.ViewRootImpl$CalledFromWrongThreadException。该代码假设模拟输入到文
我正在使用 OpenCV 库实现一个应用程序。处理完相机的 inputFrame 后,我想更新我的 TextView。但是,我收到以下错误: 08-01 17:01:45.085: E/Android
我不确定我的低估是否正确,因为我没有得到预期的输出。我有一个类,我在其中调用一个应该启动线程的方法。 public class MainActivity extends Activity { prot
我是一名优秀的程序员,十分优秀!