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

2014-11-24 12:57:11 · 作者: · 浏览: 6

//以下为TestBaidu

MainActivity如下:

package cn.testbaidu;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.ContentObserver;
import android.database.Cursor;
/**
 * Demo描述:
 * 应用A(TestBaidu)调用另外一个应用(TestContentProvider)中的自定义ContentProvider,即:
 * 1 自定义ContentProvider的使用
 * 2 其它应用调用该ContentProvider
 * 3 且在应用A(TestBaidu)使用ContentObserver观察ContentProvider的数据变化
 *
 */
public class MainActivity extends Activity {
	private Button mAddButton;
	private Button mUpdateButton;
	private Button mTypeButton;
    private ContentResolver mContentResolver;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initViews();
		initContentObserver();
	}

	private void initViews() {
		mContentResolver=this.getContentResolver();
		
		mAddButton=(Button) findViewById(R.id.addButton);
		mAddButton.setOnClickListener(new ClickListenerImpl());
		
		mUpdateButton=(Button) findViewById(R.id.updateButton);
		mUpdateButton.setOnClickListener(new ClickListenerImpl());
		
		mTypeButton=(Button) findViewById(R.id.typeButton);
		mTypeButton.setOnClickListener(new ClickListenerImpl());
		
	}
	
	//注册一个针对ContentProvider的ContentObserver用来观察内容提供者的数据变化
	private void initContentObserver(){
		 Uri uri = Uri.parse("content://cn.bs.testcontentprovider/person");  
	     this.getContentResolver().registerContentObserver(uri, true,new ContentObserverSubClass(new Handler()));  
	}

	private class ClickListenerImpl implements OnClickListener{
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.addButton:
				Person person=null;
				person=new Person("xiaoming", "9527",8888);
				testInsert(person);
				break;
			case R.id.updateButton:
				testUpdate(1);
					break;
			case R.id.typeButton:
				testType();
					break;
			default:
				break;
			}
			
		}
		
	}
	private void testInsert(Person person) {
        ContentValues contentValues=new ContentValues();
        contentValues.put("name", person.getName());
        contentValues.put("phone", person.getPhone());
        contentValues.put("salary",person.getSalary());
        Uri insertUri=Uri.parse("content://cn.bs.testcontentprovider/person");
        mContentResolver.insert(insertUri, contentValues);
        System.out.println("-----> MainActivity中执行Insert操作");
	}
	

	
	private void testUpdate(int index){
		Uri uri=Uri.parse("content://cn.bs.testcontentprovider/person/"+String.valueOf(index));
		ContentValues values=new ContentValues();
		values.put("name", "hanmeimei");
		values.put("phone", "1234");
		values.put("salary", 333);
		mContentResolver.update(uri, values, null, null);
		System.out.println("-----> MainActivity中执行Update操作");
	}

	
	private void testType(){
		Uri dirUri=Uri.parse("content://cn.bs.testcontentprovider/person");
	    String dirType=mContentResolver.getType(dirUri);
	    System.out.println("dirType:"+dirType);
	    
	    Uri itemUri=Uri.parse("content: