2011-09-01 8 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と比較することができます。私の答えは、ストレートコードハック&スラッシュソリューションです

:アップデートを

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

:あなたは次の時間と比較するために何かを持っている - 比較した後、現在の数にoldNumberを設定おそらくamit's answerをお勧めします。

+0

メソッドはチェックを続けるか、一度だけチェックしますか? – androidnoob

+0

@androidnoob 'getCount()'を呼び出すたびにチェックします - 毎回そうです。 – Mikaveli

+0

'oldNumber = number;' numberは変数に解決できません。グローバル変数として宣言する必要はありますか? – androidnoob

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

+1。多かれ少なかれ私の答えが、あなたは数秒前にそこにいた。 :) – Mikaveli

0

新しい来MMS用braodcastreceiverをregsister、あなたは変更が行われたことを知るようになります。この方法ですることができます。..

3

あなたの要素が変更された場合は代わりに毎秒をチェックする、あなたは検討する必要があります代替:この要素への特別なアクセスのみを許可し、変更後は何かを実行します。

これはよく知られているデザインパターンで、Observer Patternと呼ばれています。

これは実績のあるデザインパターンであり、コードを読みやすくし、アプリケーションのパフォーマンスと正確性を向上させます。

EDIT: javaでは、ObserverインターフェイスとObservableクラスを使用することができます。

+2

+1。良いアプローチですが、簡単な説明を書くのに役立つかもしれません。 – Mikaveli

+1

@Mikaveli:Observerインターフェースとjava.utilのObservableクラスへのリンクを追加しました.Wikiページとこれらのクラスのjavadocを読んだあと、このパターンを実装するのは難しくありません。 – amit

関連する問題