Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查整数值是否已增加?_Java_Android_Integer - Fatal编程技术网

Java 检查整数值是否已增加?

Java 检查整数值是否已增加?,java,android,integer,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(

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

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

我需要每秒钟运行一次这段代码,并在值更改时执行一些操作。问题是,我如何“检测”变化?任何帮助都将不胜感激。

取决于运行此操作的上下文。 假设此方法所属的对象将在不同的检查之间存在,您只需向该对象添加一个int currentValue字段,在第一次检查时将该值存储在该字段中,然后在后续检查中将该值与存储的值进行比较(并在必要时进行更新)


基本上,添加一个类变量-您可以在类的所有实例中使其成为
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;
    }
}

更新:


我的答案是直截了当的代码破解和斜杠解决方案,但我可能会推荐。

你可以为即将到来的新彩信注册一个
BraodCastreciver
,这样你就会知道已经发生了变化。

而不是每秒钟检查一次元素是否发生了变化,您可能需要考虑另一种选择:只允许对该元素进行特殊访问,并在更改后执行一些操作。

这是一种众所周知的设计模式,称为

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

编辑:

在java中,可以使用接口和类来执行此操作。

+1。差不多是我的答案,但你几秒钟前就到了+1.很好的方法,但它可能有助于编写一个简化的解释-这取决于OP的“noob”程度。@Mikaveli:我在java.util中添加了指向Observer接口和Observable类的链接,我认为在阅读了wiki页面和这些类的javadocs之后,实现此模式应该不会太难。该方法是继续检查还是只检查一次,仅此而已?@androidnoob每次调用
getCount()
-它都会在每次调用后进行检查。因此,每次都是这样。
oldname=number编号无法解析为变量,是否需要将其声明为全局变量?它在此行声明
int number=curPdu.getCount()-条件语句前两行。如果您试图在
If(curPdu.moveToNext()){…}
之外访问
number
,则需要更改其范围。
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;
    }
}