onSharedPpreferences已更改,无法使用Firebase作业



我有一个后台服务,如果存在新数据,它会从服务器请求新数据,它会更新我的 Firebase 作业中的sharedpreferences,有通知显示命令显示 0、20 秒之间的通知。

每 20 秒显示一次通知,这意味着我的工作工作正常,但我的onSharedPreferenceChanged没有侦听对工作服务所做的更改。

有什么方法可以监听来自作业的共享首选项更改。

家庭活动

public class HomeActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener
,SharedPreferences , SharedPreferences.OnSharedPreferenceChangeListener
{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
testUtils.myjob(this);
setContentView(R.layout.activity_home);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
......
defaultSetup();
}

private void defaultSetup() {
SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(this);
shared.registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onResume() {
super.onResume();
SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(this);
shared  .registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(this);
shared.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {

//        if (key.equals(Preferences.LIST)) {
//            Toast.makeText(this, "cool", Toast.LENGTH_LONG).show();
//        }
//        if (key.equals(Preferences.CHAT_LIST)) {
Log.e("Cool","cooooooooooooool");
Toast.makeText(this, "cool", Toast.LENGTH_LONG).show();
//        }
}
@Override
public Map<String, ?> getAll() {
return null;
}
@Nullable
@Override
public String getString(String key, @Nullable String defValue) {
return null;
}
@Nullable
@Override
public Set<String> getStringSet(String key, @Nullable Set<String> defValues) {
return null;
}
@Override
public int getInt(String key, int defValue) {
return 0;
}
@Override
public long getLong(String key, long defValue) {
return 0;
}
@Override
public float getFloat(String key, float defValue) {
return 0;
}
@Override
public boolean getBoolean(String key, boolean defValue) {
return false;
}
@Override
public boolean contains(String key) {
return false;
}
@Override
public Editor edit() {
return null;
}
@Override
public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
}
@Override
public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) {
}
@Override
protected void onDestroy() {
super.onDestroy();
PreferenceManager.getDefaultSharedPreferences(this)
.unregisterOnSharedPreferenceChangeListener(this);
}
}

火力基地作业服务

public class FirebaseJobService extends com.firebase.jobdispatcher.JobService{

@Override
public boolean onStartJob(com.firebase.jobdispatcher.JobParameters job) {
String url = ApiUtil.getNewMessage();
final Context context = this;
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
JSONArray arr;
try {
arr = new JSONArray(response);
SharedPreferences pref1 = getSharedPreferences(Preferences.LIST, 0);
String chatList = pref1.getString(Preferences.CHAT_LIST, "[]");
arr = Utils.concatArray(arr, new JSONArray(chatList));
SharedPreferences.Editor editor = pref1.edit();
editor.putString(Preferences.CHAT_LIST, arr.toString());
editor.apply();
NotificationUtils.show(context);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestManager.getInstance(this).addToRequestQueue(stringRequest);
return false;
}
@Override
public boolean onStopJob(com.firebase.jobdispatcher.JobParameters job) {
return false;
}
}

大概 :

SharedPreferences pref1 = getSharedPreferences(Preferences.LIST, 0);

导致问题,因为registerOnSharedPreferenceChangeListenerSharedPreferencesgetDefaultSharedPreferences而不是由getSharedPreferences返回

注意:

getDefaultSharedPreferences()-使用默认首选项文件名

getSharedPreferences-检索并保存首选项文件"名称"的内容

因此,要使其正常工作,请使用getDefaultSharedPreferences保存Preferences.CHAT_LIST或在由getSharedPreferences返回的实例上的活动中设置registerOnSharedPreferenceChangeListener

相关内容

  • 没有找到相关文章

最新更新