【问题标题】:Check if integer value has increased?检查整数值是否增加?
【发布时间】:2011-11-08 05:13:13
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android integer


    【解决方案1】:

    基本上,添加一个类变量 - 您可以在该类的所有实例中设置为 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

    【讨论】:

    • 该方法是继续检查还是只检查一次就这样?
    • @androidnoob 它会在您每次调用 getCount() 之后进行检查 - 所以是的,每次。
    • oldNumber = number; 数字无法解析为变量,是否需要将其声明为全局变量?
    • 它在这一行声明int number = curPdu.getCount(); - 条件语句前两行。如果您尝试在if (curPdu.moveToNext()){ ... } 之外访问number,则需要更改其范围。
    【解决方案2】:

    取决于运行它的上下文。 假设该方法所属的 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。或多或少是我的回答,但你早几秒钟就到了。 :)
    【解决方案3】:

    如果您的元素已更改,您可能需要考虑另一种方法:只允许对该元素进行特殊访问,并在更改后执行某些操作,而不是每秒检查一次。

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

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

    编辑:
    在java中,你可以使用Observer接口和Observable类来做到这一点。

    【讨论】:

    • +1。不错的方法,但编写一个简化的解释可能会有所帮助 - 取决于 OP 的“菜鸟”程度。
    • @Mikaveli:我在 java.util 中添加了 Observer 接口和 Observable 类的链接,我认为在阅读了 wiki 页面和这些类的 javadocs 之后,实现这种模式不应该太很难。
    【解决方案4】:

    您可以为即将到来的新彩信注册braodcastreceiver,这样您就会知道变化已经发生..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2023-03-18
      • 2014-03-26
      • 2013-11-29
      • 2015-08-24
      相关资源
      最近更新 更多