使用内容提供者实现数据的监听
本文的代码接着上一篇完成,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);
}
}
}
}