Android:数据库监听

本文演示了如何在Android应用中使用内容提供者插入数据,并在另一个应用中通过注册内容观察者监听这些数据变化,实现数据同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用内容提供者实现数据的监听
本文的代码接着上一篇完成,android:四大组件之一content provider
在Aapp中插入数据,那么内容提供者(SQLiteTest)中的数据变化,让Testapp监听它,即可实现功能。
这里写图片描述

下面是具体代码:
下面是Aapp中,点击按钮插入数据:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void Insertdata(View v){                                    
        Uri uri = Uri.parse("content://com.example.sqlitetest.userprovider/user_info");
        ContentResolver resolver = getApplicationContext().getContentResolver();
        ContentValues values = new ContentValues();
        values.put("user_age", 18);
        values.put("user_name", "atm18");
        resolver.insert(uri, values);
    }  
}

关于内容提供者的代码请看上一篇文章

Testapp工程中:

MainActivity .java 添加如下代码:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         Uri uri = Uri.parse("content://com.example.sqlitetest.userprovider/user_info");
         this.getContentResolver().registerContentObserver(uri, true, new PersonContentObserver(new Handler()));

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private class PersonContentObserver extends ContentObserver{

        public PersonContentObserver(Handler handler) {
            super(handler);
        }

        @Override
        public void onChange(boolean selfChange) {
            Uri uri = Uri.parse("content://com.example.sqlitetest.userprovider/user_info");
            Cursor cursor = getContentResolver().query(uri, null, null, null, "user_id desc limit 1");
            if(cursor.moveToFirst()){
                String name = cursor.getString(cursor.getColumnIndex("user_name"));
                Log.i("MainActivity", name);
            }
        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值