Проверить, увеличилось ли целочисленное значение? - PullRequest
5 голосов
/ 01 сентября 2011

У меня есть следующий код, который проверяет количество строк в базе данных.

private void checkMMSRows(){
    Cursor curPdu = getContentResolver().query(Uri.parse("content://mms/part"), null, null, null, null);
    if (curPdu.moveToNext()){
        int number = curPdu.getCount();
        System.out.println(number);
    }
}

Я буду запускать этот код каждую секунду и что-то делать, когда значение будет изменено.Проблема в том, как мне "обнаружить" изменения?Любая помощь будет оценена.

Ответы [ 4 ]

4 голосов
/ 01 сентября 2011

По сути, добавьте переменную класса - вы можете сделать ее static во всех экземплярах класса или переменную экземпляра (удалив ключевое слово static).

Каждый раз, когда вы получаетечисло, вы можете сравнить его с oldNumber.После сравнения установите oldNumber на текущее число - чтобы у вас было с чем сравнить в следующий раз:

private static int oldNumber = -1;
private void checkMMSRows(){
    Cursor curPdu = getContentResolver().query(Uri.parse("content://mms/part"), null, null, null, null);
    if (curPdu.moveToNext()){
        int number = curPdu.getCount();
        System.out.println(number);
        if(number != oldNumber){
            System.out.println("Changed");
            // add any code here that you want to react to the change
        }
        oldNumber = number;
    }
}

Обновление:

Мой ответ - простое решение для взлома и слэша, но я, вероятно, рекомендую amit's answer .

4 голосов
/ 01 сентября 2011

Зависит от контекста, в котором это выполняется.Предполагая, что объект, которому принадлежит этот метод, будет жить между различными проверками, все, что вам нужно сделать, это добавить поле int currentValue к объекту, сохранить значение там при первой проверке, а затем сравнить значение с сохраненнымив последующих проверках (и при необходимости обновлять)

int currentValue = 0;
private void checkMMSRows(){
    Cursor curPdu = getContentResolver().query(Uri.parse("content://mms/part"), null, null, null, null);
    if (curPdu.moveToNext()){
        int newValue = curPdu.getCount();
        if (newvalue != currentValue) {
               //detected a change
               currentValue = newValue;
        }
        System.out.println(newValue);
    }
}
3 голосов
/ 01 сентября 2011

Вместо проверки каждую секунду, если ваш элемент был изменен, вы можете рассмотреть альтернативный вариант: разрешить только специальный доступ к этому элементу и сделать что-то после его изменения.

Это хорошо известный шаблон проектирования, который называется Observer Pattern .

Это хорошо зарекомендовавший себя шаблон проектирования, который сделает ваш код более читабельным и, вероятно, также повысит производительность и правильность вашего приложения.

EDIT:
В java для этого можно использовать интерфейс Observer и класс Observable .

0 голосов
/ 01 сентября 2011

Вы можете зарегистрировать braodcastreceiver для новых приходящих ммс, и таким образом вы узнаете, что изменение произошло ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...