内容提供程序不与SqliteDatabase同步

时间:2016-12-30 11:33:19

标签: android

我有2项活动。

ActivityA通过Content Provider访问数据库,然后启动ActivityB

ActivityB直接访问数据库。

我在ActivityB更新数据库后发现,ActivityA按CP查询数据库,结果不会更新。

但数据库实际上已更新!

如何同步这两种方法?

PS:ActivityAActivityB位于不同的应用程序中。

3 个答案:

答案 0 :(得分:2)

通过礼节性电话更新时的内容提供商NotifyChange这是为了通知您的内容提供商的订阅者内容已更改。

活动A需要通过URI访问内容提供者并注册内容观察者。活动B需要使用基于行的URI调用NotifyChange,以便更改的观察者将接收基于行的URI。一切都取决于用于访问contentprovider的URI。这给出了实时变化b-A。 B更改>>> A接收更改并可以对它们执行某些操作。

Notification/Event for row and column level observation in Content Provider

Reload or notify Fragment's data in ViewPager

Content Provider Update

答案 1 :(得分:2)

**数据库**

  @Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub


    db.execSQL("CREATE TABLE " + TABLE_NAME
            + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, " + key_msg + " STRING, " + key_isread + " STRING)");


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}

// ************************* -------插入GCM消息--------- * ******** //

public void insert_GCM_receive_data(String msg) {

    String value;
    SQLiteDatabase db = getWritableDatabase();

    ContentValues cv = new ContentValues();

    cv.put(key_msg, msg);
    cv.put(key_isread, "N");

    value = cv.toString();

    db.insert(TABLE_NAME, null, cv);
    System.out.println("/n******this is temp table name  " + TABLE_NAME + "\nthis is temp msg  " + cv + "\nmsg" + msg + "\nval" + value);

    db.close();

}

// --------------------------------------------- -------------------------------------- //

// ********************** ----------获取警报数据---------- - ************ //     public ArrayList get_alert_msg(){

    ArrayList<String> name = new ArrayList<String>();
    try {
        SQLiteDatabase db = getWritableDatabase();
        Cursor c = null;
        c = db.rawQuery("SELECT  * FROM " + TABLE_NAME, null);

        System.out.println(c);

        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

            String str_id = c.getString(0);
            String str_msg = c.getString(1);
            String str_read = c.getString(2);
            Log.e("value", str_id + str_msg + str_read);

            HashMap<String, String> hm = new HashMap<String, String>();
            hm.put("msg", str_msg);
            hm.put("isread", str_read);


            name.add(str_msg);


        }
        c.close();
        db.close();

    } catch (Exception e) {
        Log.e("this not work", "" + e);
    }

    return name;
}

//调用类似2活动的方法 dbHelper.get_alert_msg(); ....

数据操作和检索操作在Database类中使用...   在检索数据后关闭数据库。 使用通用数据库方法进行两项活动..我希望这对你有所帮助..

答案 2 :(得分:-1)

当活动close()完成更新后,请务必在游标或数据库帮助程序上调用b