Логическое значение не меняется - PullRequest
0 голосов
/ 30 января 2019

Я хочу вызвать функцию из другой функции в моей фоновой службе для отображения сообщения. Проблема в том, что я проверяю логическое значение, и когда я открываю свое приложение, оно инициируется на 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

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Установка isSeen переменной на true не изменяет значение boolean, сохраненное в SharedPreferences.Вы должны сделать это сами.

В следующем if statement

if (totalKm ==84 && !isSeen) {
    milestoneNotification(totalKm);
    isSeen = true;
}

Заменить

isSeen = true;

на вызов функции, которая обновит boolean значение true в SharedPreferences

Редактировать 1

Метод обновления SharedPreferences

public void updateSharedPreferences(boolean value) {
    SharedPreferences sharedPreferencesIn = 
                            getSharedPreferences("inactivity", Context.MODE_PRIVATE);

    SharedPreferences.Editor editorIn = sharedPreferencesIn.edit();

    editorIn.putBoolean("inactive", value);
    editorIn.apply();
}

Теперь, когда вы хотите установитьboolean значение true в SharedPreferences, просто вызовите метод и передайте true в качестве аргумента.

updateSharedPreferences(true);

аналогично, вы можете снова установить его в значение false, просто передав falseв качестве аргумента

updateSharedPreferences(false);

Редактировать 2

Метод для чтения значения, сохраненного в SharedPreferences

public boolean readFromSharedPrefs() {
    SharedPreferences sharedPreferencesIn = 
                            getSharedPreferences("inactivity", Context.MODE_PRIVATE);

    return sharedPreferencesIn.getBoolean("inactive", false);
}

, вызывайте этот метод везде, где выхотите получить значение, сохраненное в SharedPreferences

boolean isSeen = readFromSharedPrefs();
0 голосов
/ 30 января 2019

вы устанавливаете inactive в значение false

SharedPreferences.Editor editorIn = sharedPreferencesIn.edit();
    editorIn.putBoolean("inactive", false);
    editorIn.apply();

Если вы хотите, чтобы позже оно было истинным, установите значение true

editorIn.putBoolean("inactive", true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...