Я хочу вызвать функцию из другой функции в моей фоновой службе для отображения сообщения. Проблема в том, что я проверяю логическое значение, и когда я открываю свое приложение, оно инициируется на false снова, поэтому он снова запускает функцию (я просто хочу только один раз).
Вот код:
OnCreate:
public void onCreate() {
handler = new Handler();
runnable = new Runnable() {
public void run() {
milestoneCheck();// THE FIRST FUNCTION
handler.postDelayed(runnable, 10000);
}
};
handler.postDelayed(runnable, 15000);
}
первая функция
public void milestoneCheck() {
totalKm =(int) Float.parseFloat(TripsInfo.km.get(TripsInfo.userRank - 1));
SharedPreferences sharedPreferencesInac = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
isSeen =sharedPreferencesInac.getBoolean("inactive", false);
if (totalKm ==84 && !isSeen) {
milestoneNotification(totalKm);
isSeen = true;
} else if (totalKm == 130 && isSeen) {
milestoneNotification(totalKm);
isSeen = false;
} else if (totalKm == 200 && !isSeen) {
milestoneNotification(totalKm);
}
}
У меня также есть общие предпочтения в моей основной деятельности, подобные этой
SharedPreferences sharedPreferencesIn = getSharedPreferences("inactivity", Context.MODE_PRIVATE);
SharedPreferences.Editor editorIn = sharedPreferencesIn.edit();
editorIn.putBoolean("inactive", false);
editorIn.apply();
SharedPreferences sharedPreferencesInac = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
isSeen =sharedPreferencesInac.getBoolean("inactive", false);
И, наконец, isSeen
является публичной статической переменной в моей основной деятельности!
Итак, проблема в том, что isSeen в начале имеет значение false, а затем true, но если я снова открою, приложение снова становится false.
UPDATE
private void updateTrue() {
SharedPreferences sharedPreferencesIn = getSharedPreferences("inactivity", Context.MODE_PRIVATE);
SharedPreferences.Editor editorIn = sharedPreferencesIn.edit();
editorIn.putBoolean("inactive", true);
editorIn.apply();
SharedPreferences sharedPreferencesInac = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
isSeen =sharedPreferencesInac.getBoolean("inactive", true);
}
ОБНОВЛЕНИЕ V2
Я изменил функцию и поставил ее на Asynctask, но у меня все та же проблема
protected String doInBackground(String... aurl) {
totalKm =(int) Float.parseFloat(TripsInfo.km.get(TripsInfo.userRank - 1));
Log.d("test","before"+isSeen);
if (totalKm ==84 && !isSeen ) {
milestoneNotification(totalKm);
updateTrue(true);
} else if (totalKm == 130 && isSeen) {
milestoneNotification(totalKm);
} else if (totalKm == 200 ) {
milestoneNotification(totalKm);
}
test=getSharedPreferences("inactivity",0);
isSeen=test.getBoolean("inactive",false);
Log.d("test","after"+isSeen);
return null;
}
private void updateTrue(boolean value) {
SharedPreferences sharedPreferencesIn = getSharedPreferences("inactivity",Context.MODE_PRIVATE);
SharedPreferences.Editor editorIn = sharedPreferencesIn.edit();
editorIn.putBoolean("inactive", value);
editorIn.apply();
test=getSharedPreferences("inactivity",0);
isSeen=test.getBoolean("inactive",false);
Log.d("test","function"+isSeen);
}
updateTrue()
is не на AsyncTask