2011-09-01 82 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