0

J'ai un service d'arrière-plan qui demande de nouvelles données au serveur si de nouvelles données existent, il met à jour le sharedpreferences dans mon travail firebase il y a notification show show qui affiche la notification entre 0, 20 sec.onSharedPreferenceChanged ne fonctionne pas avec le travail Firebase

Notiifcation apparaît toutes les 20 secondes, ce qui signifie que mon travail fonctionne correctement, mais mon onSharedPreferenceChanged n'écoute pas les modifications effectuées pour le service d'emploi.

Existe-t-il un moyen d'écouter les modifications sharedPreferences de Job.

activité Accueil

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); 

    } 
} 

Firebase Job Service

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; 
    } 
} 

Répondre

1

Probablement:

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

causant problème, car la mise en registerOnSharedPreferenceChangeListener pour SharedPreferences qui est retourné par getDefaultSharedPreferences au lieu de par getSharedPreferences.

Note:

getDefaultSharedPreferences()- utilise un nom par défaut préférence fichier

Et

getSharedPreferences- récupérer et maintenir le contenu des préférences fichier « nom

Donc, pour le faire fonctionner enregistrer Preferences.CHAT_LIST en utilisant getDefaultSharedPreferences ou définir registerOnSharedPreferenceChangeListener dans l'activité sur l'instance qui est retournée par getSharedPreferences.

+0

mon mauvais. Merci pour cela. – codenut