2011-09-01 70 views
5

我有以下代码,它检查数据库中的行数。检查整数值是否增加?

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

非常基本,添加类变量 - 你可以让整个类,或者实例变量的所有实例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

+0

该方法是继续检查还是只检查一次,就是这样? – androidnoob

+0

@androidnoob它每次调用'getCount()'后检查 - 每次都是这样。 – Mikaveli

+0

'oldNumber = number;'编号无法解析为变量,是否需要将其声明为全局变量? – androidnoob

4

取决于此运行的上下文。 假设此方法属于将不同的检查之间生活的对象,所有你需要做的是一个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); 
    } 
} 
+0

+1。或多或少我的答案,但你几秒前就到了那里。 :) – Mikaveli

0

可以regsister新来的MMS一个braodcastreceiver而这样一来,你会知道,改变已经发生..

3

而不是检查每一秒,如果你的元素被改变的,你可能要考虑的替代方法:只允许对此元素进行特殊访问,并在更改后执行某些操作。

此这是一个公知的设计图案和被称为Observer Pattern

这是一个经过充分验证的设计模式,这将使你的代码更易读,并且可能也将会提高性能,以及应用程序的正确性。

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

+2

+1。好的方法,但这可能有助于写一个简单的解释 - 取决于OP的'noob'。 – Mikaveli

+1

@Mikaveli:我添加链接到Observer接口和可观察java.util中的类,我觉得阅读维基页面后,并为这些类的javadoc,实施这种模式不应该太难。 – amit