ContentProvider使用完整示例(二)――ContentObserver(二)

2014-11-24 12:57:11 · 作者: · 浏览: 7
//cn.bs.testcontentprovider/person/3"); String itemType=mContentResolver.getType(itemUri); System.out.println("itemType:"+itemType); } //自定义一个内容观察者 private class ContentObserverSubClass extends ContentObserver { long lastTime=0; public ContentObserverSubClass(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); //该方式的目的: //防止onChange()的多次调用 //但是注意问题: //关于onChange()的多次调用看似解决了,但是今天又测试到一个新的问题---> //1 手机界面停留在TestBaidu,然后一直点击Back键盘直至Home画面 //2 此时再从应用列表进入TestBaidu应用进行操作,依然会出现该问题. //该问题困惑不解.有待进一步分析.测试环境--->摩托罗拉,OS:2.3.6 if (System.currentTimeMillis()-lastTime>1000) { ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse("content://cn.bs.testcontentprovider/person"); // 获取最新的一条数据 Cursor cursor = resolver.query(uri, null, null, null,"personid desc limit 1"); while (cursor.moveToNext()) { int personid = cursor.getInt(cursor.getColumnIndex("personid")); System.out.println("内容提供者中的数据发生变化,现数据中第一条数据的personid="+personid); } cursor.close(); lastTime=System.currentTimeMillis(); } } } }
Person.java如下:

package cn.testbaidu;

public class Person {
	private Integer id;
	private String name;
	private String phone;
	private Integer salary;
	public Person(String name, String phone,Integer salary) {
		this.name = name;
		this.phone = phone;
		this.salary=salary;
	}
	public Person(Integer id, String name, String phone,Integer salary) {
		this.id = id;
		this.name = name;
		this.phone = phone;
		this.salary=salary;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public Integer getSalary() {
		return salary;
	}
	public void setSalary(Integer salary) {
		this.salary = salary;
	}
	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", phone=" + phone+ ", salary=" + salary + "]";
	}
	
	
	
}

main.xml如下:
  

    
   

    
   

    
      
   


  

//以下为TestContentProvider

MainActivity如下:

package cn.testcontentprovider;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

}

ContentProviderTest如下:

package cn.testcontentprovider;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
/**
 * 注意事项:
 * 1 在AndroidManifest.xml中注册ContentProvider时的属性
 *   android:exported="true"表示允许其他应用访问.
 *   这样TestBaidu这个应用才可以访问该处的ContentProvider
 * 2 注意getContext().getContentResolver().notifyChange(uri, null);
 *   的使用.否则ContentObserver无响应.
 */
public class ContentProviderTest extends ContentProvider {
	private DBOpenHelper dbOpenHelper;
	private  UriMatcher URI_MATCHER;
	private