Android数据库监听器+Demo

xiaoxiao2021-02-28  111

Android数据库监听器+Demo


数据库监听

  在Android开发中,常常会使用到改变数据库内容之后,马上执行相应的操作,比如:文件删除之后,下载完成之后立即显示某个视图上面的内容。很多人都是使用数据库存储,当数据库发生改变之后,有的人会去重新query一遍来获取,这样其实是十分占用内存的,还有可能因为处理cursor不当,而导致程序的内存没有释放一系列问题。

  Android内部其实提供了一个ContentObserver的东西来监听数据库的变化的。


ContentObserver

  ContentObserver的构造函数需要一个参数Hanlder,因为ContentObserver的内部是使用了一个实现Runnable接口的内部类NotificationRunnable,去实现数据库内容的变化,所以需要使用Hanlder去post消息。

注册ContentObserver的方法:

/** * @param uri Uri的类型,这个值是需要监听的数据库的uri * @param notifyForDescendants boolean类的值,true的话就监听所有与此uri相关的uri。 * @param observer 需要的contentObserver */ getContentResolver().registerContentObserver(uri, notifyForDescendents, observer);

接着,初始一个ContentObserver对象,然后重载onChange(boolean)这个方法,当数据库变化之后,你需要做的东西都可以写在里面。

private ContentObserver observer = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); } };

最后,你需要在你不需要监听数据库的时候,及时的处理掉监听操作。

getContentResolver().unregisterContentObserver(observer);

自定义监听器

下面的监听器,是我自定义的监听器。 你可以直接用这个监听器去调用数据库监听,就和别的监听器的使用方法没啥区别。

/** * Created by sadaharusong on 2017/8/5 0005. * Github : https://github.com/sadaharusong * Email : jacksomangel@163.com */ public class DataBaseListener { private Context mContext; private onDataBaseListener mListener; private ContentObserver cob = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); mListener.onDataBaseChange(); } }; /** * @param uri The URI of the database to listen */ DataBaseListener(Context context, Uri uri){ this.mContext = context; context.getContentResolver().registerContentObserver(uri,true,cob); } public void setOnDataBaseListener(onDataBaseListener listener){ this.mListener = listener; } public void removeOnDataBaseListener(){ mContext.getContentResolver().unregisterContentObserver(cob); } public interface onDataBaseListener{ void onDataBaseChange(); } }

然后比如你要在Activity中监听某一个数据的内容并作出相应操作的时候就可以使用

package sadaharusong.github.com.databaselistener; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { DataBaseListener mDataBaseListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //This Uri is a example,don't use it,use the uri you want listen mDataBaseListener = new DataBaseListener(this,Uri.EMPTY); mDataBaseListener.setOnDataBaseListener(new DataBaseListener.onDataBaseListener() { @Override public void onDataBaseChange() { // TODO: To Do Want You Want Do } }); } @Override protected void onDestroy() { super.onDestroy(); mDataBaseListener.removeOnDataBaseListener(); } }

上面监听器的地址: https://github.com/sadaharusong/DataBaseListener 喜欢的朋友加个star~

转载请注明原文地址: https://www.6miu.com/read-51008.html

最新回复(0)