gpt4 book ai didi

android - 当另一个线程中的语句失败时恢复 android 首选项的值

转载 作者:行者123 更新时间:2023-11-29 18:45:02 25 4
gpt4 key购买 nike

我的应用程序中有一些设置,允许用户使用带有 PreferencePreferenceScreen 进行操作。但是,我想将设置存储在服务器上,以便这些设置可以在多个设备上持续存在。我有以下代码可以执行此操作:

private void updateSettingOnPrefChange(final Preference pref, final Setting setting) {
pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, final Object newValue) {
try {
setting.update(newValue, new Callback<Boolean>() {
@Override
public void call(Boolean succeeded) {
if (!succeeded) {
Toast.makeText(getActivity(), "Setting failed to update. Please try again.", Toast.LENGTH_LONG).show();
//here I need to revert the value of the Preference without again calling the onChangeListener
}
}
}, getActivity());
} catch (Exception ex) {
if (BuildConfig.DEBUG)
ex.printStackTrace();
Toast.makeText(getActivity(), "Setting failed to update. Please try again.", Toast.LENGTH_LONG).show();
return false;
}
return true;
}
});
}

正如您在代码中看到的,请求正在使用自定义 Callback 类的不同线程上运行,以根据调用结果进行清理。问题是代码已经在主线程上返回 true。

如何在回调函数中恢复 Preference 的值(最好不要同时调用 onPrefChangeListener 函数,这样我就不会得到无限递归)?

最佳答案

使用 OnPreferenceClickListener 而不是 OnPreferenceChangeListener 来监听用户在设置字段上的点击,然后相应地发出您的 rpc 请求。如果您必须更新该值(在服务器出现故障的情况下),您可以更改设置而无需触发点击监听器和无限循环。

https://developer.android.com/reference/android/preference/Preference.html#setOnPreferenceClickListener(android.preference.Preference.OnPreferenceClickListener)

关于android - 当另一个线程中的语句失败时恢复 android 首选项的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52176737/

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