检查整数值是否增加?

时间:2011-09-01 08:12:54

标签: java android integer

我有以下代码,用于检查数据库中的行数。

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 个答案:

答案 0 :(得分:4)

取决于运行它的上下文。 假设此方法所属的Object将存在于不同的检查之间,您需要做的就是向对象添加一个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);
    }
}

答案 1 :(得分:4)

非常基本上,添加一个类变量 - 您可以在类的所有实例中创建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;
    }
}

<强>更新

我的回答是一个直接的代码黑客&amp;斜线解决方案,但我可能会推荐amit's answer

答案 2 :(得分:3)

您可能想要考虑替代方案,而不是每秒都检查元素是否已更改:只允许对此元素进行特殊访问,并在更改后执行某些操作。

这是一个众所周知的设计模式,称为Observer Pattern

这是一种经过验证的设计模式,它可以使您的代码更具可读性,并且可能还可以提高应用程序的性能和正确性。

编辑:
在java中,您可以使用Observer接口和Observable类来执行此操作。

答案 3 :(得分:0)

您可以为新来的mms注册braodcastreceiver,这样您就会知道已经发生了变化..