registerContentObserver()
का उपयोग करने वाले सभी उदाहरण ContentProvider
इंटरफ़ेस के माध्यम से ऐसा करते हैं। लेकिन कर्सर के पास registerContentObserver()
कॉल है, इसलिए मुझे लगता है कि एंड्रॉइड लोगों ने कुछ गहरे जादू को एक साथ रखा है जो SQLite
कर्सर पर अपडेट प्राप्त करने की अनुमति देगा जब सक्रिय परिणाम सेट की पंक्तियों में से एक बदल गई है। या तो मैं इसे गलत कर रहा हूं, या ऐसा कोई जादू नहीं है। यहां कोड है जिसके साथ मैं काम कर रहा हूं, उम्मीद है कि जब मैं पंक्ति # 1 में मान को अपडेट करने के लिए बटन पर क्लिक करता हूं तो मुझे onChange()
कॉलबैक मिलेगा। कोई विचार?रजिस्टर कंटेंट ऑब्सर्वर() कच्चे SQLite कर्सर
public class MainActivity extends Activity {
private static final String DATABASE_NAME = "test.db";
public static final String TAG = "dbtest";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button make = (Button)findViewById(R.id.btn_make_record);
make.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MyOpenHelper oh = new MyOpenHelper(v.getContext());
SQLiteDatabase wdb = oh.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("value", String.valueOf(System.currentTimeMillis()));
if (wdb.insert(MyOpenHelper.TABLE_NAME, null, cv) == -1) {
Log.d(TAG, "Unable to insert row");
} else {
Log.d(TAG, "Inserted row ");
}
wdb.close();
}
});
Button update = (Button)findViewById(R.id.btn_update_record);
update.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MyOpenHelper oh = new MyOpenHelper(v.getContext());
SQLiteDatabase wdb = oh.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("value", String.valueOf(System.currentTimeMillis()));
int count = wdb.update(MyOpenHelper.TABLE_NAME, cv, "_id = ?", new String[] {"1"});
Log.d(TAG, "Updated " + count + " row(s)");
wdb.close();
}
});
MyOpenHelper oh = new MyOpenHelper(this);
SQLiteDatabase rdb = oh.getReadableDatabase();
Cursor c = rdb.query(MyOpenHelper.TABLE_NAME, null, "_id = ?", new String[] {"1"}, null, null, null);
startManagingCursor(c);
contentObserver = new MyContentObserver(new Handler());
c.registerContentObserver(contentObserver);
}
private class MyContentObserver extends ContentObserver {
MyContentObserver(Handler handler) {
super(handler);
}
public boolean deliverSelfNotifications() {
return true;
}
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.d(TAG, "Saw a change in row # 1");
}
}
MyContentObserver contentObserver;
public class MyOpenHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "test";
private static final String TABLE_CREATE =
"CREATE TABLE " + TABLE_NAME + " (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"value TEXT);";
MyOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
}
अरे आदमी, स्वीकृत उत्तर गलत है, मुझे पता है कि यह आपका उत्तर है लेकिन यह सही नहीं है। –