gpt4 book ai didi

android - SharedPreferencesChangeListener 不工作

转载 作者:行者123 更新时间:2023-11-30 00:52:16 25 4
gpt4 key购买 nike

SharedPrefencesChangeListener 在此代码中不起作用。如有遗漏请指出。

我想知道它是否正在发生,因为我已经在服务中声明了它。

更改另一个 Activity 的 SharedPreferences 的代码:

getSharedPreferences("TRACKER", Context.MODE_PRIVATE).edit().putString("TRIP_LIST", String.valueOf(trip_list)).apply();

///

package com.tracker;

import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.v4.content.LocalBroadcastManager;

import org.json.JSONException;
import org.json.JSONObject;

public class SharedPrefMonService extends Service implements SharedPreferences.OnSharedPreferenceChangeListener {


LocalBroadcastManager broadcaster = LocalBroadcastManager.getInstance(this);



public SharedPrefMonService() {

}

@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
return null;
}

@Override
public void onDestroy() {
super.onDestroy();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.unregisterOnSharedPreferenceChangeListener(this);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
return Service.START_STICKY;
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals("TRIP_LIST")){
try {
JSONObject trip_list = new JSONObject(sharedPreferences.getString("TRIP_LIST", "{}"));

if(trip_list.keys().hasNext()){
//start location service
}else{
//stop location service
}
//update trip list view here
Intent intent = new Intent("SharedPrefMonService");
intent.putExtra("updated_trip_list", trip_list.toString());
broadcaster.sendBroadcast(intent);
} catch (JSONException e) {
e.printStackTrace();
}

}
}
}

最佳答案

这并不是说您必须在 Service 中拥有监听器。您没有在您正在修改的同一 SharedPreferences 上设置监听器。

Context#getSharedPreferences() 使用您指定的名称创建一个 SharedPreferencesPreferenceManager.getDefaultSharedPreferences() 根据您的包名称创建一个 SharedPreferences 并附加 _preferences。它们最终都是 XML 文件,但其中一个的监听器不会收到另一个更改的通知。

要么更改您正在修改的 SharedPreferences 以使用默认值 - PreferenceManager.getDefaultSharedPreferences() - 或者将您的监听器设置在您当前保存到的那个上 - getSharedPreferences("TRACKER", Context.MODE_PRIVATE)

我还要提到 OnSharedPreferenceChangeListener 只会在特定键的值更改 时触发。如果您保存的键与它已有的值相同,onSharedPreferenceChanged() 将不会运行。

关于android - SharedPreferencesChangeListener 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40815271/

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