我有2个活动。内容提供者不与SqliteDatabase同步
ActivityA
通过Content Provider访问数据库,它开始ActivityB
。
ActivityB
直接访问数据库。
我发现ActivityB
更新了数据库,ActivityA
通过CP查询数据库,结果不会更新。
但数据库实际上已更新!
如何同步这两种方法?
PS:ActivityA
和ActivityB
在不同的应用程序。
我有2个活动。内容提供者不与SqliteDatabase同步
ActivityA
通过Content Provider访问数据库,它开始ActivityB
。
ActivityB
直接访问数据库。
我发现ActivityB
更新了数据库,ActivityA
通过CP查询数据库,结果不会更新。
但数据库实际上已更新!
如何同步这两种方法?
PS:ActivityA
和ActivityB
在不同的应用程序。
当活动b
与更新完成时,请确保在游标或db助手上调用close()
。
这对我来说似乎不正确。请参阅http://stackoverflow.com/questions/14267176/closing-the-qlitedatabase-in-a-content-provider?rq=1 – Hod
谷歌的文档也会提到同样的东西,种类。但他们仍然建议关闭onDestroy。滚动到底部:https://developer.android.com/training/basics/data-storage/databases.html#PersistingDbConnection –
当您更新为礼节性电话时的内容提供商NotifyChange这是为了通知您的内容提供商的订阅者内容已更改。
活动A需要通过URI访问内容提供者并注册一个内容观察者。活动B需要使用基于行的URI调用NotifyChange,以便观察者能够接收到基于行的URI。一切都取决于用于访问contentprovider的URI。这给出了实时更改b-A。 B变化>>> A接收变化,并可以对它们做些什么。
Notification/Event for row and column level observation in Content Provider
我已经做到了,但没有成功。 – timyau
** **数据库
@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);
}
// ***************** ******** ------- INSERT GCM MESSAGE --------- *********************** *** //
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();
}
// -------------------------------------------- --------------------------------------- //
// *** ******************* ---------- GET ALERT DATA ------------ ****** ******************** // 公共的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() ; ....
在数据库类中使用数据操作和检索操作... 在检索数据后关闭数据库。 使用通用数据库方法进行两项活动..我希望这会对你有所帮助。
你真的想要数据库共享吗?我有共享偏好分享代码..这对你来说足够了吗? –
发布您的数据库操作代码。 –
您的代码在哪里?您错过了notifyChange()的呼叫 – danny117