0

新しいデータが存在する場合、サーバーから新しいデータを要求するバックグラウンドサービスがあります。sharedpreferencesがfirebaseジョブに更新されます。通知の表示コマンドは0,20秒です。onSharedPreferenceChangedがFirebaseジョブで動作していない

私の仕事がうまくいっていることを意味しますが、私のonSharedPreferenceChangedは仕事のために加えられた変更を待ちません。

JobからsharedPreferencesの変更をリッスンする方法はありますか。

ホーム活動おそらく

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ジョブサービス

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

答えて

1

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

SharedPreferencesためregisterOnSharedPreferenceChangeListenerを設定することがgetDefaultSharedPreferencesではなく、getSharedPreferencesによって返されるので、問題の原因となります。

注:

getDefaultSharedPreferences()-

デフォルトの優先ファイル名を使用しています

そして

getSharedPreferences-好みの内容は、だから、仕事を得るために「名前

を提出取得し、保持しますPreferences.CHAT_LISTを使用してgetDefaultSharedPreferencesを保存するか、返されたインスタンスのアクティビティにregisterOnSharedPreferenceChangeListenerを設定します。 by getSharedPreferences

+0

私の悪いです。ありがとう。 – codenut

関連する問題