ContentObserver 监听(监听自己数据库的变化)
来源:互联网 发布:下载苹果软件 编辑:程序博客网 时间:2024/06/14 12:05
在博文Android中的数据操作中我们写了SQLite的增删改查方法,现在我们将调用其中的insert方法来往数据库中增加几条数据并且显示在ListView中,方法很简单,增添完数据后,用query查询出所有数据作为ListView的数据源,然后创建适配器和ListView连接即可,略去不谈。此处我们想说的是,当数据加入ListView中之后,有外部程序使用了本程序的数据库(可以参考博文 ContentProvider 的创建以及增删改查操作(你想看的都在这里了))增删改数据,如何在ListView中实时更新,如何通知到本程序数据已经被更改
第一:在需要监视数据变化的活动窗口创建一个ContentObsever
新建MyContentObsever继承自ContentObsever,写构造函数,重写onChange()方法
class MyContentObselver extends ContentObserver{ public MyContentObselver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); Toast.makeText(MainListAcitvity.this, "Data changed!", Toast.LENGTH_LONG).show(); } }
第二:注册
getContentResolver().registerContentObserver(uri,true,new MyContentObselver(new Handler()));
uri即是本程序中provider提供的,只写到content://authorities即可,true代表接收带path,id等等的uri
第三:需要在自己程序中继承自ContentProvider中的类的各个方法中写上通知改变
getContext().getContentResolver().notifyChange(uri,null);
此处的uri即是自己每个方法中所用的uri
至此,一个监听就已经实现
但,我们想在数据改变时,在ListView中直接体现出来,怎么办呢?
只须在onChange()方法中,重新再查一遍数据即可
public void onChange(boolean selfChange) { super.onChange(selfChange); persons10 = dao5.queryAll(); list.setAdapter(new PersonAdapter(getApplicationContext(),persons10)); Toast.makeText(MainListAcitvity.this, "Data changed!", Toast.LENGTH_LONG).show(); }
上面涉及到的所有代码:
MainListActivity(显示列表并监听数据):
package com.example.administrator.sqliteexecsql;import android.database.ContentObserver;import android.net.Uri;import android.os.Handler;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.ListView;import android.widget.Toast;import java.util.List;public class MainListAcitvity extends ActionBarActivity { ListView list; PersonDao dao5; List<Person> persons10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_list_acitvity); dao5 = new PersonDao(getApplicationContext()); //获取数据源,设置监听器,将数据显示在ListView中 persons10 = dao5.queryAll(); list = (ListView)findViewById(R.id.listview); list.setAdapter(new PersonAdapter(this, persons10)); Uri uri= Uri.parse("content://com.example.administrator.sqliteexecsql.provider"); //true表示有跟在Uri后面的参数也接收通知 getContentResolver().registerContentObserver(uri,true,new MyContentObselver(new Handler())); } class MyContentObselver extends ContentObserver{ public MyContentObselver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); persons10 = dao5.queryAll(); list.setAdapter(new PersonAdapter(getApplicationContext(),persons10)); Toast.makeText(MainListAcitvity.this, "Data changed!", Toast.LENGTH_LONG).show(); } } }
DBContentProvider(本程序中继承自ContentProvider的类)在上篇博文中已经有所体现,主要是在insert(),delete()和update()方法中添加一行通知改变的代码
之后运行程序,在上篇博文中启动访问本程序的数据库的程序,增加一个,然后本程序列表中也将实时增加一条数据。
在下篇博文中,写一个短信监听小例子来具体讲解如何在程序中监听其他程序数据库的变化
0 0
- ContentObserver 监听(监听自己数据库的变化)
- ContentObserver监听数据库变化
- 使用ContentObserver监听短信数据库的变化
- 使用ContentObserver监听数据库变化
- 使用ContentObserver监听数据库变化
- 使用ContentObserver监听数据库变化
- 使用ContentObserver监听数据库变化
- 关于ContentObserver监听不到数据库变化的解决办法
- Android使用ContentObserver监听数据库变化
- Android使用ContentObserver监听数据库变化
- Android使用ContentObserver监听数据库变化
- Android使用ContentObserver监听数据库变化
- android 使用contentobserver监听数据库内容变化
- Android使用ContentObserver监听数据库变化
- android 使用contentobserver监听数据库内容变化
- ContentObserver实现数据库的监听
- ContentObserver监听ContentProvider数据变化
- Android ContentObserver 监听图库变化
- [LeetCode] Majority Element II
- windows和linux中UDP编程
- 偶数求和
- 关于mysql Table * is read only错误
- AssertValid和Dump函数的应用
- ContentObserver 监听(监听自己数据库的变化)
- openfire服务器和jdk环境删除命令
- 《实体解析与信息质量》 - 3.1.2 SERF模型
- C++操作符重载
- VS的错误列表窗口
- CentOS7安装cuda7
- jstl自定义函数的使用
- Markdown语法帮助
- Android Dev Tool 国内网站