2

小さなコンテンツ プロバイダーを作成しました (これは、db テーブルをクエリして値を取得するためだけに使用します)。プロバイダが正常に動作することを確認しました。

テーブルの値は、通常の sql 挿入 (コンテンツ プロバイダーではなく) を介して定期的に更新されます。

上記のように通常の sqlite 操作で挿入/更新または削除が発生するたびに、コンテンツ プロバイダーと通信するために作成されたコンテンツ リゾルバーに通知する必要があります。このリゾルバーは、データベースのクエリを実行し、いくつかの値をフェッチするためだけにコンテンツ プロバイダーと通信します。

これは可能ですか?はいの場合、何をする必要がありますか?

どんな助けでも大歓迎です。

私のDB挿入メソッドを含めるように編集しました:

public void insert(ArrayList<Integer> profileValues, String tableName){
    String duplicationCheck = " WHERE NOT EXISTS (SELECT 1 FROM profiles WHERE devID = "+"'"+profileValues.get(0)+"'"+");";
    if(tableName.equals(PROFILES_TABLE)){
        profilesDB.execSQL("INSERT INTO " +
                PROFILES_TABLE +
                "(devID,alert,findme,proximity,timep,conn_status) SELECT "+"'"+profileValues.get(0)+"'"+","+profileValues.get(1)+","+profileValues.get(2)+","+profileValues.get(3)+","+profileValues.get(4)+","+profileValues.get(5)+duplicationCheck);
    }
    getContentResolver().notifyChange(MY_CONTENT_URI, null);

 }
4

1 に答える 1

3

ContentObserver基礎となるデータベースを手動で更新し、登録されたインスタンスに通知notifyChange()する必要がある場合はいつでもContentResolverContext.

たとえば、ContentObserver定数値で a を登録したとしますMY_CONTENT_URI

//Insert, update, or delete data in the database

//If you are within a Context, like Activity or Service
getContentResolver().notifyChange(MY_CONTENT_URI, null);

//Otherwise pass in a Context you can call on
context.getContentResolver().notifyChange(MY_CONTENT_URI, null);

あなたが通過した特定の登録済みオブザーバー全員Uriに通知されます。

于 2012-09-24T21:42:47.003 に答える