安卓 监听 mysql_Android监听数据库的值改变与否
做購物車的時候有這個需要,當點擊增加數量的時候,要更更新總價與數量,也就是往數據庫里更新數據,當更新完的時候,就要計算出新的價錢,這就需要對數據庫進行監聽。這就要用到內容觀察者了。
第一步:往數據庫里增刪改查值的時候就不能直接調用數據庫的方法了,先要下一個Contentprovider ,指向這個數據庫:
package cn.zmit.neospace.provide;
import cn.zmit.neospace.db.CartDao;
import cn.zmit.neospace.model.CartData;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;
public class CartProvider extends ContentProvider {
private static final int INSERT = 10;
private static final int UPDATE = 20;
private static final int DELETE = 30;
private CartDao cartDao;
private static Uri changeUri=Uri.parse("content://cn.zmit.neospace.cartprovider");
private static UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);
static{
matcher.addURI("cn.zmit.neospace.cartprovider", "insert", INSERT);
matcher.addURI("cn.zmit.neospace.cartprovider", "update", UPDATE);
matcher.addURI("cn.zmit.neospace.cartprovider", "delete", DELETE);
}
@Override
public boolean onCreate() {
cartDao=new CartDao(getContext());
return false;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
return null;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
int result=matcher.match(uri);
if (result==INSERT) {
CartData cartData=(CartData) values.get("cartdata");
cartDao.add(cartData);
getContext().getContentResolver().notifyChange(changeUri, null);?? //通知內容觀察者,對應uri數據庫改變
}else {
throw new IllegalArgumentException("uri地址不正確");
}
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int result=matcher.match(uri);
if (result==DELETE) {
String product_id=selectionArgs[0];
cartDao.delete(product_id);
getContext().getContentResolver().notifyChange(changeUri, null);?? //通知內容觀察者,對應uri數據庫改變
}else {
throw new IllegalArgumentException("uri地址不正確");
}
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
int result=matcher.match(uri);
if (result==UPDATE) {
String newquantity= (String) values.get("newquantity");
String product_id= (String) values.get("product_id");
cartDao.update(newquantity,product_id);
getContext().getContentResolver().notifyChange(changeUri, null);?? //通知內容觀察者,對應uri數據庫改變
}else {
throw new IllegalArgumentException("uri地址不正確");
}
return 0;
}
}
當然不忘了在AndroidManifest里面注冊,因為是四大組建嘛
第二步,就是一個關鍵的方法:
getContext().getContentResolver().notifyChange(changeUri, null);?? //通知內容觀察者,對應uri數據庫改變
當我們通過Contentprovider來改變數據庫中的值的時候就可以在注冊內容觀察者的onChange()方法里面監聽到數據的內容發生改變就可以做相應的操作了
第三步:注冊內容觀察者
/**
* 內容觀察者
*/
private class Myobserve extends ContentObserver {
public Myobserve(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
amount = 0.0;
count = 0;
CommonTools.startRotate(CartActivity.this, true,
AnimationSpeed.FAST, image_loading);
new Thread() {
public void run() {
CartDao cartDao = new CartDao(CartActivity.this);
List cartDatas = cartDao.findAll();
Message msg = new Message();
msg.what = 100;
msg.obj = cartDatas;
handler.sendMessage(msg);
};
}.start();
//???System.out
//?????.println("-----------------------------------------------數據庫內容改變");
super.onChange(selfChange);
}
}
執行這行代碼注冊:
getContentResolver().registerContentObserver(
Uri.parse("content://cn.zmit.neospace.cartprovider"), true,
new Myobserve(new Handler()));
轉載時請注明出處及相應鏈接,本文永久地址:https://blog.yayuanzi.com/2180.html
微信打賞
支付寶打賞
感謝您對作者wangbin的打賞,我們會更加努力!????如果您想成為作者,請點我
總結
以上是生活随笔為你收集整理的安卓 监听 mysql_Android监听数据库的值改变与否的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 倒计时css和js html代码,手把手
- 下一篇: mysql 征途_MySQL数据库