android开发笔记之ContentProvider使用样例二

   这个ContentProvider的样例,在一个db数据库中,有二个TAB(分别是:programmer,leader),分别提供了对每个表的增,删,改,查操作,但是在这个例子中,我们没有采用AsyncQueryHandler来异步对db数据库的数据进行增,删,改,查操作,其实这原理和样例一是相同的,大家可以参考使用就OK了。

1.效果图:



2.详细代码:

(1)LeaderInfo.java

package com.example.testcontentprovider02;

public class LeaderInfo {   
    public String name;  
    public String title;  
    public int level;  
    
    public LeaderInfo(String name,String title,int level){
    	this.name = name;
    	this.title = title;
    	this.level = level;
    }
    
    public String getName(){
    	return name;
    }
    public void setName(String name){
    	this.name = name;
    }    
    public void setTitle(String title){
    	this.title = title;
    }    
    public String getTitle(){
    	return title;
    }  
    public void setLevel(int level){
    	this.level = level;
    }    
    public int getLevel(){
    	return level;
    }
    
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return super.toString()+"--name:"+name+"--title:"+title+"--level:"+level;
	}
} 

(2)ProgrammerInfo.java

package com.example.testcontentprovider02;

public class ProgrammerInfo {  
  
    public String name;  
    public int age; 
    
    public ProgrammerInfo(String name,int age){
    	this.name = name;
    	this.age = age;
    }
    public String getName(){
    	return name;
    }
    public void setName(String name){
    	this.name = name;
    } 
    public void setAge(int age){
    	this.age = age;
    }    
    public int getAge(){
    	return age;
    }
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return super.toString()+"--name:"+name+"--age:"+age;
	}
}  

(3)DatabaseHelper.java

package com.example.testcontentprovider02;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper {
	
	private static final String DATABASE_NAME = "db_demo.db";  
    private static final int DATABASE_VERSION = 1;  
  
    public DatabaseHelper(Context context) {  
        super(context, DATABASE_NAME, null, DATABASE_VERSION);  
    }  
  
    @Override  
    public void onCreate(SQLiteDatabase db) {  
        db.execSQL("CREATE TABLE " + Provider.ProgrammerColumns.TABLE_NAME + " ("  
                + Provider.ProgrammerColumns._ID + " INTEGER PRIMARY KEY,"  
                + Provider.ProgrammerColumns.NAME + " TEXT,"  
                + Provider.ProgrammerColumns.AGE + " INTEGER"  
                + ");");  
          
        db.execSQL("CREATE TABLE " + Provider.LeaderColumns.TABLE_NAME + " ("  
                + Provider.LeaderColumns._ID + " INTEGER PRIMARY KEY,"  
                + Provider.LeaderColumns.NAME + " TEXT,"  
                + Provider.LeaderColumns.TITLE + " TEXT,"  
                + Provider.LeaderColumns.LEVEL + " INTEGER"  
                + ");");  
    }  
  
    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        db.execSQL("DROP TABLE IF EXISTS " + Provider.ProgrammerColumns.TABLE_NAME);  
        db.execSQL("DROP TABLE IF EXISTS " + Provider.LeaderColumns.TABLE_NAME);  
        onCreate(db);  
    }  
	
}

(4)Provider.java

package com.example.testcontentprovider02;

import android.net.Uri;
import android.provider.BaseColumns;

public class Provider{
    
    public static final String AUTHORITY = "com.android.provider.demo.common";  
    public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.android.demo";   
    public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.android.demo";  
  
    public static final class ProgrammerColumns implements BaseColumns {  
        public static final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/programmers");  
        public static final String TABLE_NAME = "programmer";  
        public static final String DEFAULT_SORT_ORDER = "age desc";            
        public static final String NAME = "name";  
        public static final String AGE = "age";           
    }  
        
    public static final class LeaderColumns implements BaseColumns {  
        public static final Uri CONTENT_URI = Uri.parse("content://"+ AUTHORITY +"/leaders");  
        public static final String TABLE_NAME = "leader";  
        public static final String DEFAULT_SORT_ORDER = "level desc";           
        public static final String NAME = "name";  
        public static final String TITLE = "title";  
        public static final String LEVEL = "level";          
    }  
}

(5)CommonProvider.java

package com.example.testcontentprovider02;

import java.util.HashMap;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;

public class CommonProvider extends ContentProvider{

	private static HashMap<String, String> sprogrammersProjectionMap;  
    private static final UriMatcher sUriMatcher;   
    private DatabaseHelper mOpenHelper;
	  
    private static final int PROGRAMMERS = 1;  
    private static final int PROGRAMMERS_ID = 2;         
    private static final int LEADERS = 3;  
    private static final int LEADERS_ID = 4;  
    
    static {  
        sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);  
        sUriMatcher.addURI(Provider.AUTHORITY, "programmers", PROGRAMMERS);  
        sUriMatcher.addURI(Provider.AUTHORITY, "programmers/#", PROGRAMMERS_ID);  
          
        sUriMatcher.addURI(Provider.AUTHORITY, "leaders", LEADERS);  
        sUriMatcher.addURI(Provider.AUTHORITY, "leaders/#", LEADERS_ID);  
  
        sprogrammersProjectionMap = new HashMap<String, String>();  
        sprogrammersProjectionMap.put(Provider.ProgrammerColumns._ID, Provider.ProgrammerColumns._ID);  
        sprogrammersProjectionMap.put(Provider.ProgrammerColumns.NAME, Provider.ProgrammerColumns.NAME);  
        sprogrammersProjectionMap.put(Provider.ProgrammerColumns.AGE, Provider.ProgrammerColumns.AGE);  
          
        sprogrammersProjectionMap.put(Provider.LeaderColumns._ID, Provider.LeaderColumns._ID);  
        sprogrammersProjectionMap.put(Provider.LeaderColumns.NAME, Provider.LeaderColumns.NAME);  
        sprogrammersProjectionMap.put(Provider.LeaderColumns.TITLE, Provider.LeaderColumns.TITLE);  
        sprogrammersProjectionMap.put(Provider.LeaderColumns.LEVEL, Provider.LeaderColumns.LEVEL);  
    }
  
    @Override  
    public boolean onCreate() {  
        mOpenHelper = new DatabaseHelper(getContext());  
        return true;  
    }  
  
    @Override  
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,  
            String sortOrder) {  
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();  
        String orderBy;  
        switch (sUriMatcher.match(uri)) { 
	        case LEADERS:  
	        case LEADERS_ID:  
	            qb.setTables(Provider.LeaderColumns.TABLE_NAME);  
	            // If no sort order is specified use the default  
	            if (TextUtils.isEmpty(sortOrder)) {  
	                orderBy = Provider.LeaderColumns.DEFAULT_SORT_ORDER;  
	            } else {  
	                orderBy = sortOrder;  
	            }  
	            break;  
	        case PROGRAMMERS:  
	        case PROGRAMMERS_ID:  
	            qb.setTables(Provider.ProgrammerColumns.TABLE_NAME);  
	            // If no sort order is specified use the default  
	            if (TextUtils.isEmpty(sortOrder)) {  
	                orderBy = Provider.ProgrammerColumns.DEFAULT_SORT_ORDER;  
	            } else {  
	                orderBy = sortOrder;  
	            }  
	            break;  
	        default:  
	            throw new IllegalArgumentException("Unknown URI " + uri);  
        }  
  
        switch (sUriMatcher.match(uri)) {  
	        case LEADERS:  
	        case PROGRAMMERS:  
	            qb.setProjectionMap(sprogrammersProjectionMap);  
	            break;    
	        case PROGRAMMERS_ID:  
	            qb.setProjectionMap(sprogrammersProjectionMap);  
	            qb.appendWhere(Provider.ProgrammerColumns._ID + "=" + uri.getPathSegments().get(1));  
	            break;               
	        case LEADERS_ID:  
	            qb.setProjectionMap(sprogrammersProjectionMap);  
	            qb.appendWhere(Provider.LeaderColumns._ID + "=" + uri.getPathSegments().get(1));  
	            break;    
	        default:  
	            throw new IllegalArgumentException("Unknown URI " + uri);  
        }  
  
        // Get the database and run the query  
        SQLiteDatabase db = mOpenHelper.getReadableDatabase();  
        Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);  
  
        // Tell the cursor what uri to watch, so it knows when its source data changes  
        c.setNotificationUri(getContext().getContentResolver(), uri);  
        return c;  
    }  
  
    @Override  
    public String getType(Uri uri) {  
        switch (sUriMatcher.match(uri)) {
	        case LEADERS:  
	        case PROGRAMMERS:  
	            return Provider.CONTENT_TYPE;  
	        case PROGRAMMERS_ID:  
	        case LEADERS_ID:  
	            return Provider.CONTENT_ITEM_TYPE;  
	        default:  
	            throw new IllegalArgumentException("Unknown URI " + uri);  
        }  
    }  
  
    @Override  
    public Uri insert(Uri uri, ContentValues initialValues) {  
        ContentValues values;  
        if (initialValues != null) {  
            values = new ContentValues(initialValues);  
        } else {  
            values = new ContentValues();  
        }  
          
        String tableName = "";  
        String nullColumn = "";  
        switch (sUriMatcher.match(uri)) { 
	        case LEADERS:  
	            tableName = Provider.LeaderColumns.TABLE_NAME;  
	            nullColumn = Provider.LeaderColumns.NAME;  
	            // Make sure that the fields are all set  
	            if (values.containsKey(Provider.LeaderColumns.NAME) == false) {  
	                values.put(Provider.LeaderColumns.NAME, "");  
	            }    
	            if (values.containsKey(Provider.LeaderColumns.TITLE) == false) {  
	                values.put(Provider.LeaderColumns.TITLE, "");  
	            }                
	            if (values.containsKey(Provider.LeaderColumns.LEVEL) == false) {  
	                values.put(Provider.LeaderColumns.LEVEL, 0);  
	            }  
	            break;  
	        case PROGRAMMERS:  
	            tableName = Provider.ProgrammerColumns.TABLE_NAME;  
	            nullColumn = Provider.ProgrammerColumns.NAME;  
	            // Make sure that the fields are all set  
	            if (values.containsKey(Provider.ProgrammerColumns.NAME) == false) {  
	                values.put(Provider.ProgrammerColumns.NAME, "");  
	            }   
	            if (values.containsKey(Provider.ProgrammerColumns.AGE) == false) {  
	                values.put(Provider.ProgrammerColumns.AGE, 0);  
	            }  
	            break;  
	        default:  
	            // Validate the requested uri  
	            throw new IllegalArgumentException("Unknown URI " + uri);                    
        }  
  
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();  
        long rowId = db.insert(tableName, nullColumn, values);  
        if (rowId > 0) {  
            Uri noteUri = ContentUris.withAppendedId(uri, rowId);  
            getContext().getContentResolver().notifyChange(noteUri, null);  
            return noteUri;  
        }   
        throw new SQLException("Failed to insert row into " + uri);  
    }  
  
    @Override  
    public int delete(Uri uri, String where, String[] whereArgs) {  
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();  
        int count;  
        switch (sUriMatcher.match(uri)) {   
	        case PROGRAMMERS:  
	            count = db.delete(Provider.ProgrammerColumns.TABLE_NAME, where, whereArgs);  
	            break;   
	        case PROGRAMMERS_ID:  
	            String programmerId = uri.getPathSegments().get(1);  
	            count = db.delete(Provider.ProgrammerColumns.TABLE_NAME, Provider.ProgrammerColumns._ID + "=" + programmerId  
	                    + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);  
	            break;               
	        case LEADERS:  
	            count = db.delete(Provider.LeaderColumns.TABLE_NAME, where, whereArgs);  
	            break;                
	        case LEADERS_ID:  
	            String leaderId = uri.getPathSegments().get(1);  
	            count = db.delete(Provider.LeaderColumns.TABLE_NAME, Provider.LeaderColumns._ID + "=" + leaderId  
	                    + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);  
	            break;   
	        default:  
	            throw new IllegalArgumentException("Unknown URI " + uri);  
        }   
        getContext().getContentResolver().notifyChange(uri, null);  
        return count;  
    }  
  
    @Override  
    public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {  
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();  
        int count;  
        switch (sUriMatcher.match(uri)) {   
	        case PROGRAMMERS:  
	            count = db.update(Provider.ProgrammerColumns.TABLE_NAME, values, where, whereArgs);  
	            break;    
	        case PROGRAMMERS_ID:  
	            String noteId = uri.getPathSegments().get(1);  
	            count = db.update(Provider.ProgrammerColumns.TABLE_NAME, values, Provider.ProgrammerColumns._ID + "=" + noteId  
	                    + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);  
	            break;  
	        case LEADERS:  
	            count = db.update(Provider.LeaderColumns.TABLE_NAME, values, where, whereArgs);  
	            break;               
	        case LEADERS_ID:  
	            String leaderId = uri.getPathSegments().get(1);  
	            count = db.update(Provider.LeaderColumns.TABLE_NAME, values, Provider.LeaderColumns._ID + "=" + leaderId  
	                    + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : ""), whereArgs);  
	            break;    
	        default:  
	            throw new IllegalArgumentException("Unknown URI " + uri);  
        }   
        getContext().getContentResolver().notifyChange(uri, null);  
        return count;  
    }    
}

(6)MainActivity.java

package com.example.testcontentprovider02;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.ContentValues;

public class MainActivity extends Activity implements OnClickListener {
		
	private Button myInserBt_table_progra = null;
	private Button myDeleBt_table_progra = null;
	private Button myUpdateBt_table_progra = null;
	private Button myQueryBt_table_progra = null;	
	private Button myInserBt_table_leader = null;
	private Button myDeleBt_table_leader = null;
	private Button myUpdateBt_table_leader = null;
	private Button myQueryBt_table_leader = null;	
	
	private Controller myController = null;
	private LeaderInfo myLeader = null;	
	private ProgrammerInfo myProgrammer = null;
	private int i = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);       
        init();       
    }    
    
	private void init() {
		// TODO Auto-generated method stub
		myInserBt_table_progra = (Button)findViewById(R.id.myInserBt_table_progra);
		myInserBt_table_progra.setOnClickListener(this);
		myDeleBt_table_progra = (Button)findViewById(R.id.myDeleBt_table_progra);
		myDeleBt_table_progra.setOnClickListener(this);
		myUpdateBt_table_progra = (Button)findViewById(R.id.myUpdateBt_table_progra);
		myUpdateBt_table_progra.setOnClickListener(this);
		myQueryBt_table_progra = (Button)findViewById(R.id.myQueryBt_table_progra);
		myQueryBt_table_progra.setOnClickListener(this);  
		myInserBt_table_leader = (Button)findViewById(R.id.myInserBt_table_leader);
		myInserBt_table_leader.setOnClickListener(this);
		myDeleBt_table_leader = (Button)findViewById(R.id.myDeleBt_table_leader);
		myDeleBt_table_leader.setOnClickListener(this);
		myUpdateBt_table_leader = (Button)findViewById(R.id.myUpdateBt_table_leader);
		myUpdateBt_table_leader.setOnClickListener(this);
		myQueryBt_table_leader = (Button)findViewById(R.id.myQueryBt_table_leader);
		myQueryBt_table_leader.setOnClickListener(this);     	
    		
    	myController = new Controller(this);   	
	}

	@Override
	public void onClick(View view) {
		// TODO Auto-generated method stub
		if(view == myInserBt_table_progra){
			Log.i(Controller.TAG, "onClick--myInserBt_table_progra"); 
			myProgrammer = new ProgrammerInfo("name_programmer_"+i, 20);
			myController.onInSertDateProgrammerLister(myProgrammer);			
		}else if(view == myDeleBt_table_progra){
			Log.i(Controller.TAG, "onClick--myDeleBt_table_progra");			
			String[] deleteValue = {"name_programmer_0"};  
            String where = "name";  
			myController.onDeleteDateProgrammerLister(where,deleteValue);			
		}else if(view == myUpdateBt_table_progra){
			Log.i(Controller.TAG, "onClick--myUpdateBt_table_progra");			
			ContentValues values = new ContentValues();  
            values.put(Provider.ProgrammerColumns.NAME, "testUpdate"); 
            values.put(Provider.ProgrammerColumns.AGE,39);                          
            String where = "name";  
            String[] selectValue = {"name_programmer_0"};    
			myController.onUpdateDateProgrammerLister(values,where,selectValue);			
		}else if(view == myQueryBt_table_progra){
			Log.i(Controller.TAG, "onClick--myQueryBt_table_progra");			
			myController.onQueryDateProgrammerLister();			
		}else if(view == myInserBt_table_leader){
			Log.i(Controller.TAG, "onClick--myInserBt_table_leader");	
			myLeader = new LeaderInfo("name_leader_"+i,"super_major",30);
			myController.onInSertDateLeaderLister(myLeader);				
		}else if(view == myDeleBt_table_leader){
			Log.i(Controller.TAG, "onClick--myDeleBt_table_leader");			
			String[] deleteValue = {"name_leader_0"};  
            String where = "name";  
			myController.onDeleteDateLeaderLister(where, deleteValue);			
		}else if(view == myUpdateBt_table_leader){
			Log.i(Controller.TAG, "onClick--myUpdateBt_table_leader");			
			ContentValues values = new ContentValues();  
            values.put(Provider.LeaderColumns.NAME, "update_leader_name"); 
            values.put(Provider.LeaderColumns.TITLE, "update_title_super"); 
            values.put(Provider.LeaderColumns.LEVEL,40);                          
            String where = "name";  
            String[] selectValue = {"name_leader_0"};    
			myController.onUpdateDateLeaderLister(values,where,selectValue);		
		}else if(view == myQueryBt_table_leader){
			Log.i(Controller.TAG, "onClick--myQueryBt_table_leader");			
			myController.onQueryDateLeaderLister();		
		}	
	}  
}

(7)Controller.java

package com.example.testcontentprovider02;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;

public class Controller{
	public static final String TAG = "TestContentProvider02";  
		   	
	private Context myContext = null;
	
    private String[] PROGRAMMER_PROJECTION = new String[] {   
    		Provider.ProgrammerColumns._ID,  // 0  
    		Provider.ProgrammerColumns.NAME, // 1 
    		Provider.ProgrammerColumns.AGE  // 2 
            }; 
    
    private String[] LEADER_PROJECTION = new String[] {   
    		Provider.LeaderColumns._ID,  // 0  
    		Provider.LeaderColumns.NAME, // 1 
    		Provider.LeaderColumns.TITLE, // 2 
    		Provider.LeaderColumns.LEVEL  // 3
            }; 
		
	public Controller(Context myContext){
		this.myContext = myContext;	
	}
	
    public void onQueryDateLeaderLister() {  
        // TODO Auto-generated method stub  
    	Log.i(TAG, "Controller--onQueryDateLeaderLister"); 
    	Cursor cursor = myContext.getContentResolver().query(Provider.LeaderColumns.CONTENT_URI,
    			LEADER_PROJECTION, null, null,Provider.LeaderColumns.DEFAULT_SORT_ORDER);		
		if (cursor.moveToFirst()) {  
			for (int i = 0; i < cursor.getCount(); i++) {  
				cursor.moveToPosition(i);  
				String name = cursor.getString(1); 
				String title = cursor.getString(2); 
				int level = cursor.getInt(3);
				Log.i(TAG, "db第"+i+"个数据:"+"--name:"+name+"--title"+title+"--level:"+level);  
			}  
		}  
		cursor.close();   
    } 
    
    public void onInSertDateLeaderLister(LeaderInfo myLeader) {  
        // TODO Auto-generated method stub  
    	Log.i(TAG, "Controller--onInSertDateLeaderLister");  
		ContentValues values = new ContentValues();  
        values.put(Provider.LeaderColumns.NAME, myLeader.name);
        values.put(Provider.LeaderColumns.TITLE, myLeader.title);
        values.put(Provider.LeaderColumns.LEVEL, myLeader.level);
        Uri uri = myContext.getContentResolver().insert(Provider.LeaderColumns.CONTENT_URI, values);  
        
        String lastPath = uri.getLastPathSegment();  
        if (TextUtils.isEmpty(lastPath)) {  
            Log.i(TAG, "insert failure!");  
        } else {  
            Log.i(TAG, "insert success! the id is:" + lastPath);  
        }        
    }
    
    public void onDeleteDateLeaderLister(String where, String[] deleteValue) {  
        // TODO Auto-generated method stub  
    	Log.i(TAG, "Controller--onDeleteDateLeaderLister");
		// 删除ID为1的记录的方法: 
        //Uri uri = ContentUris.withAppendedId(Provider.LeaderColumns.CONTENT_URI, 1); 
        //myContext.getContentResolver().delete(uri, null, null); 
                          
		myContext.getContentResolver().delete(Provider.LeaderColumns.CONTENT_URI, where+"=?", deleteValue); 
		Log.i(TAG, "delete data:"+"--where:"+where+"--deleteValue:"+deleteValue);     
    }
    
    public void onUpdateDateLeaderLister(ContentValues values, String where, String[] selectValue) {  
        // TODO Auto-generated method stub   
    	Log.i(TAG, "Controller--onUpdateDateLeaderLister");
    	
        // 更新ID为1的记录 
        //Uri uri = ContentUris.withAppendedId(Provider.LeaderColumns.CONTENT_URI, 1);         
        //myContext.getContentResolver().update(uri, values, null, null); 
         
        //getContentResolver().update(uri, values, "name"+"=?", selectValue);  
		myContext.getContentResolver().update(Provider.LeaderColumns.CONTENT_URI, values, where+"=?", selectValue);      
    }
    
	public void onInSertDateProgrammerLister(ProgrammerInfo myprogrammer) {
		// TODO Auto-generated method stub
		ContentValues values = new ContentValues();  
        values.put(Provider.ProgrammerColumns.NAME, myprogrammer.name);
        values.put(Provider.ProgrammerColumns.AGE, myprogrammer.age);  
        Uri uri = myContext.getContentResolver().insert(Provider.ProgrammerColumns.CONTENT_URI, values);  
     
        String lastPath = uri.getLastPathSegment();  
        if (TextUtils.isEmpty(lastPath)) {  
            Log.i(TAG, "insert failure!");  
        } else {  
            Log.i(TAG, "insert success! the id is:" + lastPath);  
        }        
	}

	public void onDeleteDateProgrammerLister(String where, String[] deleteValue) {
		// TODO Auto-generated method stub
		// 删除ID为1的记录的方法: 
        //Uri uri = ContentUris.withAppendedId(Provider.ProgrammerColumns.CONTENT_URI, 1); 
        //myContext.getContentResolver().delete(uri, null, null); 
                          
		myContext.getContentResolver().delete(Provider.ProgrammerColumns.CONTENT_URI, where+"=?", deleteValue); 
		Log.i(TAG, "delete data:"+"--where:"+where+"--deleteValue:"+deleteValue);  
	}

	public void onUpdateDateProgrammerLister(ContentValues values, String where, String[] selectValue) {
		// TODO Auto-generated method stub
	
        // 更新ID为1的记录 
        //Uri uri = ContentUris.withAppendedId(Provider.ProgrammerColumns.CONTENT_URI, 1);         
        //myContext.getContentResolver().update(uri, values, null, null); 
         
        //getContentResolver().update(uri, values, "name"+"=?", selectValue);  
		myContext.getContentResolver().update(Provider.ProgrammerColumns.CONTENT_URI, values, where+"=?", selectValue);  
	}

	public void onQueryDateProgrammerLister() {
		// TODO Auto-generated method stub 
		Cursor cursor = myContext.getContentResolver().query(Provider.ProgrammerColumns.CONTENT_URI,
				PROGRAMMER_PROJECTION, null, null,Provider.ProgrammerColumns.DEFAULT_SORT_ORDER);		
		if (cursor.moveToFirst()) {  
			for (int i = 0; i < cursor.getCount(); i++) {  
				cursor.moveToPosition(i);  
				String name = cursor.getString(1); 				
				int age = cursor.getInt(2);
				Log.i(TAG, "db第"+i+"个数据:"+"--name:"+name+"--age:"+age);  
			}  
		}  
		cursor.close();  
	}
}

(8)activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ScrollView
		android:layout_width="match_parent"
    	android:layout_height="match_parent">
    	<RelativeLayout 
			android:layout_width="match_parent"
    		android:layout_height="match_parent"
    	    > 
			<Button
		        android:id="@+id/myInserBt_table_progra"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="表programmer-插入数据" />
		    
			<Button
		        android:id="@+id/myDeleBt_table_progra"
		        android:layout_below="@id/myInserBt_table_progra"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="表programmer-删除数据" />
		        
			<Button
		        android:id="@+id/myUpdateBt_table_progra"
		        android:layout_below="@id/myDeleBt_table_progra"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="表programmer-更新数据" />
			
			<Button
		        android:id="@+id/myQueryBt_table_progra"
		        android:layout_below="@id/myUpdateBt_table_progra"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="表programmer-查询数据" />
			
			
			<Button
		        android:id="@+id/myInserBt_table_leader"
		        android:layout_below="@id/myQueryBt_table_progra"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="表leader-插入数据" />
		    
			<Button
		        android:id="@+id/myDeleBt_table_leader"
		        android:layout_below="@id/myInserBt_table_leader"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="表leader-删除数据" />
		        
			<Button
		        android:id="@+id/myUpdateBt_table_leader"
		        android:layout_below="@id/myDeleBt_table_leader"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="表leader-更新数据" />
			
			<Button
		        android:id="@+id/myQueryBt_table_leader"
		        android:layout_below="@id/myUpdateBt_table_leader"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="表leader-查询数据" />   
	        
		</RelativeLayout>
    </ScrollView>   	
</RelativeLayout>

(9)androidmanifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testcontentprovider02"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.testcontentprovider02.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
       <provider android:name=".CommonProvider"  
            android:authorities="com.android.provider.demo.common" /> 
    </application>

</manifest>

3.代码下载地址:

4.参考文献:

(1).android 玩转ContentProvider之三--实现一个ContentProvider对多张表进行操作
http://blog.csdn.net/maylian7700/article/details/7365433 
(2).ContentProvider-----一个完整的样例(一)
http://blog.csdn.net/hfreeman2011/article/details/8556445

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hfreeman2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值