自定义ContentProvider


一、自定义ContentProvider:
(一)、操作步骤:

1、编写一个类,必须继承自ContentProvider类;

2、实现ContentProvider类中所有的抽象方法;

    需要实现:onCreate() 、getType() 、query() 、insert() 、update()、delete() 等方法。


【备注:】

ContentProvider暴露出来的数据和方法并不是给自身调用的,而是给其他应用程序来调用。其他应用程序通过其ContentResolver对象调用的query() 、insert() 、update()、delete() 等方法就是我们在这里暴露出来的ContentProvider类中的重写后的query() 、insert() 、update()、delete() 方法。

3、定义ContentProvider的Uri。这个Uri是ContentResolver对象执行CRUD操作时重要的参数;

4、使用UriMatcher对象映射Uri返回代码;

5、在AndroidMainfest.xml文件中使用<provider>标签注册ContentProvider。


(二)、ContentProvider类中的六个抽象方法:

1、boolean onCreate() 

2、Uri insert(Uri uri, ContentValues values)

3、int delete(Uri uri, String selection, String[] selectionArgs)

4、int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)

5、Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 

6、String getType(Uri uri) 


(三)、ContentProvider类中六个抽象方法的说明:

1、onCreate()   初始化provider

2、query()         返回数据给调用者

3、insert()         插入新数据到ContentProvider

4、update()       更新ContentProvider已经存在的数据

5、delete()        从ContentProvider中删除数据

6、getType()    返回ContentProvider数据的Mime类型


(四)、在清单文件中声明注册ContentProvider:

 
   

<provider android:name=".MyProvider"
android:authorities="com.hht.englishwordsprovider"
android:exported="true"
/>

//android:name属性的值是:ContentProvider类的子类的完整路径;
//android:authorities属性的值是:content:URI中authority部分。一般就是将name属性的值全小写。
//android:exported属性是否允许其他应用调用。如果是false,则该ContentProvider不允许其他应用调用。

(五)、UriMatcher:
        继承ContentProvider类后发现,ContentProvider类中只有一个onCreate()生命周期方法——当其他应用程序通过ContentResolver第一次访问该ContentProvider时,onCreate()会被回调。
        其他应用在通过ContentResolver对象执行CRUD操作时,都需要一个重要的参数Uri。为了能顺利提供这个Uri参数,Android系统提供了一个UriMatcher工具类。

UriMatcher工具类提供了两个方法:
1、void addURI(String authority , String path , int code)  :  该方法用于向UriMatcher对象注册Uri。其中authority和path是Uri中的重要部分。而code代表该Uri对应的标示符。
2、int match(Uri uri) : 根据注册的Uri来判断指定的Uri对应的标示符。如果找不到匹配的标示符,该方法返回-1。

private static UriMatcher matcher = null;
static {
// 定义一个Uri匹配器。将UriMatcher.NO_MATCH,即-1作为参数。
matcher = new UriMatcher(UriMatcher.NO_MATCH);
// 定义一组匹配规则
matcher.addURI(AUTHORITY, "words", 1);
matcher.addURI(AUTHORITY, "newwords", 2);
}

【备注:】
        ContentProvider是单例模式的,当多个应用程序通过使用ContentResolver 来操作使用ContentProvider 提供的数据时,ContentResolver 调用的数据操作会委托给同一个ContentProvider 来处理。这样就能保证数据的一致性。
实例代码:
  1. package com.hht.android14_wordstest;  
  2.   
  3. import java.util.regex.Pattern;  
  4.   
  5. import android.content.ContentProvider;  
  6. import android.content.ContentValues;  
  7. import android.content.UriMatcher;  
  8. import android.database.Cursor;  
  9. import android.database.sqlite.SQLiteDatabase;  
  10. import android.net.Uri;  
  11. import android.util.Log;  
  12.   
  13. public class Myprovider extends ContentProvider {  
  14.   
  15.     private static final String TAG = "Myprovider";  
  16.     private MySQLiteOpenHelper dbHelper = null;  
  17.     private SQLiteDatabase db = null;  
  18.     private static UriMatcher matcher = null;  
  19.     private static final String AUTHORITY = "com.hht.englishwordsprovider";  
  20.     private static final int CODE1 = 1;  
  21.     private static final int CODE2 = 2;  
  22.     private static final int CODE3 = 3;  
  23.   
  24.     static {  
  25.         matcher = new UriMatcher(UriMatcher.NO_MATCH);  
  26.         matcher.addURI(AUTHORITY, "englishwords", CODE1);  
  27.         matcher.addURI(AUTHORITY, "newwords", CODE2);  
  28.         matcher.addURI(AUTHORITY, "englishwords/*", CODE3);// 匹配任何文本  
  29.   
  30.     }  
  31.   
  32.     @Override  
  33.     public boolean onCreate() {  
  34.   
  35.         Log.i(TAG, "==onCreate");  
  36.         dbHelper = new MySQLiteOpenHelper(getContext());  
  37.         db = dbHelper.getReadableDatabase();  
  38.         return true;  
  39.   
  40.     }  
  41.   
  42.     @Override  
  43.     public Cursor query(Uri uri, String[] projection, String selection,  
  44.             String[] selectionArgs, String sortOrder) {  
  45.   
  46.         Cursor cursor = null;  
  47.         switch (matcher.match(uri)) {  
  48.         case CODE1:  
  49.             // Log.i(TAG, "==query");  
  50.             cursor = db.query("englishwords", projection, selection,  
  51.                     selectionArgs, nullnull, sortOrder);  
  52.             Log.i(TAG, "==query" + cursor.getCount());  
  53.             break;  
  54.         case CODE2:  
  55.             cursor = db.query("newwords", projection, selection, selectionArgs,  
  56.                     nullnull, sortOrder);  
  57.             break;  
  58.         case CODE3:  
  59.   
  60.             Log.i("MyProvider""==返回值是:" + matcher.match(uri));  
  61.   
  62.             String data = uri.getLastPathSegment();  
  63.   
  64.             Log.i("MyProvider""==" + data);  
  65.             if (isChineseWord(data)) {  
  66.                 cursor = db.query("englishwords", projection, "detail like ?",  
  67.   
  68.                 new String[] { data + "%" }, nullnull, sortOrder);  
  69.             } else if (isNumber(data)) {  
  70.                 cursor = db.query("englishwords", projection, "_id=?",  
  71.   
  72.                 new String[] { data }, nullnull, sortOrder);  
  73.             } else {  
  74.                 cursor = db.query("englishwords", projection, "words like ?",  
  75.   
  76.                 new String[] { data + "%" }, nullnull, sortOrder);  
  77.             }  
  78.   
  79.         }  
  80.   
  81.         return cursor;  
  82.     }  
  83.   
  84.     @Override  
  85.     public Uri insert(Uri uri, ContentValues values) {  
  86.   
  87.         long id = 0;  
  88.         String resultUri = "";  
  89.         switch (matcher.match(uri)) {  
  90.         case CODE1:  
  91.             id = db.insert("englishwords"null, values);  
  92.             resultUri = "content://" + AUTHORITY + "/englishwords/" + id;  
  93.   
  94.         case CODE2:  
  95.             id = db.insert("newwords"null, values);  
  96.             resultUri = "content://" + AUTHORITY + "/newwords/" + id;  
  97.   
  98.         }  
  99.         return Uri.parse(resultUri);  
  100.     }  
  101.   
  102.     @Override  
  103.     public int delete(Uri uri, String selection, String[] selectionArgs) {  
  104.   
  105.         int count = 0;  
  106.         switch (matcher.match(uri)) {  
  107.         case CODE1:  
  108.             count = db.delete("englishwords", selection, selectionArgs);  
  109.             break;  
  110.         case CODE2:  
  111.             count = db.delete("newwords", selection, selectionArgs);  
  112.             break;  
  113.   
  114.         }  
  115.   
  116.         return count;  
  117.     }  
  118.   
  119.     @Override  
  120.     public int update(Uri uri, ContentValues values, String selection,  
  121.             String[] selectionArgs) {  
  122.   
  123.         int count = 0;  
  124.         switch (matcher.match(uri)) {  
  125.         case CODE1:  
  126.             count = db.update("englishwords", values, selection, selectionArgs);  
  127.             break;  
  128.         case CODE2:  
  129.             count = db.update("newwords", values, selection, selectionArgs);  
  130.             break;  
  131.   
  132.         }  
  133.         return count;  
  134.     }  
  135.   
  136.     @Override  
  137.     public String getType(Uri uri) {  
  138.   
  139.         return null;  
  140.     }  
  141.   
  142.     public static boolean isNumber(String str) {  
  143.         Pattern pattern = Pattern.compile("[0-9]+");  
  144.         return pattern.matcher(str).matches();  
  145.     }  
  146.   
  147.     public static boolean isChineseWord(String str) {  
  148.         Pattern pattern = Pattern.compile("[\u4e00-\u9fa5]+");  
  149.         return pattern.matcher(str).matches();  
  150.     }  
  151. }  
package com.hht.android14_wordstest;

import java.util.regex.Pattern;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;

public class Myprovider extends ContentProvider {

	private static final String TAG = "Myprovider";
	private MySQLiteOpenHelper dbHelper = null;
	private SQLiteDatabase db = null;
	private static UriMatcher matcher = null;
	private static final String AUTHORITY = "com.hht.englishwordsprovider";
	private static final int CODE1 = 1;
	private static final int CODE2 = 2;
	private static final int CODE3 = 3;

	static {
		matcher = new UriMatcher(UriMatcher.NO_MATCH);
		matcher.addURI(AUTHORITY, "englishwords", CODE1);
		matcher.addURI(AUTHORITY, "newwords", CODE2);
		matcher.addURI(AUTHORITY, "englishwords/*", CODE3);// 匹配任何文本

	}

	@Override
	public boolean onCreate() {

		Log.i(TAG, "==onCreate");
		dbHelper = new MySQLiteOpenHelper(getContext());
		db = dbHelper.getReadableDatabase();
		return true;

	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {

		Cursor cursor = null;
		switch (matcher.match(uri)) {
		case CODE1:
			// Log.i(TAG, "==query");
			cursor = db.query("englishwords", projection, selection,
					selectionArgs, null, null, sortOrder);
			Log.i(TAG, "==query" + cursor.getCount());
			break;
		case CODE2:
			cursor = db.query("newwords", projection, selection, selectionArgs,
					null, null, sortOrder);
			break;
		case CODE3:

			Log.i("MyProvider", "==返回值是:" + matcher.match(uri));

			String data = uri.getLastPathSegment();

			Log.i("MyProvider", "==" + data);
			if (isChineseWord(data)) {
				cursor = db.query("englishwords", projection, "detail like ?",

				new String[] { data + "%" }, null, null, sortOrder);
			} else if (isNumber(data)) {
				cursor = db.query("englishwords", projection, "_id=?",

				new String[] { data }, null, null, sortOrder);
			} else {
				cursor = db.query("englishwords", projection, "words like ?",

				new String[] { data + "%" }, null, null, sortOrder);
			}

		}

		return cursor;
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {

		long id = 0;
		String resultUri = "";
		switch (matcher.match(uri)) {
		case CODE1:
			id = db.insert("englishwords", null, values);
			resultUri = "content://" + AUTHORITY + "/englishwords/" + id;

		case CODE2:
			id = db.insert("newwords", null, values);
			resultUri = "content://" + AUTHORITY + "/newwords/" + id;

		}
		return Uri.parse(resultUri);
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {

		int count = 0;
		switch (matcher.match(uri)) {
		case CODE1:
			count = db.delete("englishwords", selection, selectionArgs);
			break;
		case CODE2:
			count = db.delete("newwords", selection, selectionArgs);
			break;

		}

		return count;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {

		int count = 0;
		switch (matcher.match(uri)) {
		case CODE1:
			count = db.update("englishwords", values, selection, selectionArgs);
			break;
		case CODE2:
			count = db.update("newwords", values, selection, selectionArgs);
			break;

		}
		return count;
	}

	@Override
	public String getType(Uri uri) {

		return null;
	}

	public static boolean isNumber(String str) {
		Pattern pattern = Pattern.compile("[0-9]+");
		return pattern.matcher(str).matches();
	}

	public static boolean isChineseWord(String str) {
		Pattern pattern = Pattern.compile("[\u4e00-\u9fa5]+");
		return pattern.matcher(str).matches();
	}
}

在另一个应用中利用我们暴漏的ContentProvider获得数据,封装一个工具类进行CRUD操作
  1. package com.hht.homework_testwordsprovider.utils;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import android.content.ContentResolver;  
  9. import android.content.ContentValues;  
  10. import android.database.Cursor;  
  11. import android.net.Uri;  
  12. import android.util.Log;  
  13.   
  14. public class MyWordsHelper {  
  15.     // 获取单词信息  
  16.     public static List<Map<String, Object>> selectWords(  
  17.   
  18.     ContentResolver resolver) {  
  19.   
  20.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  21.   
  22.         String uri_englishwords = "content://com.hht.englishwordsprovider/englishwords";  
  23.   
  24.         // 从englishwords表中或许英文单词。  
  25.   
  26.         Cursor cursor_englishwords = resolver.query(  
  27.                 Uri.parse(uri_englishwords),  
  28.   
  29.                 new String[] { "_id""words""detail" }, nullnullnull);  
  30.   
  31.         // 遍历所有的单词的信息  
  32.   
  33.         while (cursor_englishwords.moveToNext()) {  
  34.   
  35.             int _id = cursor_englishwords.getInt(cursor_englishwords  
  36.   
  37.             .getColumnIndex("_id"));  
  38.   
  39.             String words = cursor_englishwords.getString(cursor_englishwords  
  40.   
  41.             .getColumnIndex("words"));  
  42.             String detail = cursor_englishwords.getString(cursor_englishwords  
  43.   
  44.             .getColumnIndex("detail"));  
  45.   
  46.             Map<String, Object> map = new HashMap<String, Object>();  
  47.   
  48.             map.put("_id", _id);  
  49.   
  50.             map.put("words", words);  
  51.             map.put("detail", detail);  
  52.   
  53.             list.add(map);  
  54.         }  
  55.         Log.i("hht""==" + list.toString());  
  56.   
  57.         return list;  
  58.     }  
  59.   
  60.     // 以下代码是更新单词的方法。  
  61.   
  62.     public static boolean updateWords(ContentResolver resolver,  
  63.             Map<String, Object> map, int id) {  
  64.   
  65.         String uri_englishwords = "content://com.hht.englishwordsprovider/englishwords";  
  66.         ContentValues values = new ContentValues();  
  67.   
  68.         // 修改englishwords表中的数据  
  69.         values.put("words", map.get("words").toString());  
  70.   
  71.         values.put("detail", map.get("detail").toString());  
  72.   
  73.         int count1 = resolver.update(Uri.parse(uri_englishwords), values,  
  74.   
  75.         "_id=?"new String[] { id + "" });  
  76.   
  77.         if (count1 > 0) {  
  78.             return true;  
  79.         } else {  
  80.             return false;  
  81.         }  
  82.   
  83.     }  
  84.   
  85.     public static void insertWords(ContentResolver resolver,  
  86.             Map<String, Object> map) {  
  87.         String uri_englishwords = "content://com.hht.englishwordsprovider/englishwords";  
  88.         Uri uri = Uri.parse(uri_englishwords);  
  89.         ContentValues values = new ContentValues();  
  90.   
  91.         // englishwords向表中添加用户名称信息  
  92.   
  93.         values.put("words", map.get("words").toString());  
  94.         values.put("detail", map.get("detail").toString());  
  95.         resolver.insert(uri, values);  
  96.   
  97.     }  
  98.   
  99.     // 以下代码是删除englishwords表中单词的方法。  
  100.     public static int deleteWords(ContentResolver resolver, String where,  
  101.             String[] whereArgs) {  
  102.         String uri_englishwords = "content://com.hht.englishwordsprovider/englishwords";  
  103.         return resolver.delete(Uri.parse(uri_englishwords), where, whereArgs);  
  104.     }  
  105. }  
package com.hht.homework_testwordsprovider.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;

public class MyWordsHelper {
	// 获取单词信息
	public static List<Map<String, Object>> selectWords(

	ContentResolver resolver) {

		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

		String uri_englishwords = "content://com.hht.englishwordsprovider/englishwords";

		// 从englishwords表中或许英文单词。

		Cursor cursor_englishwords = resolver.query(
				Uri.parse(uri_englishwords),

				new String[] { "_id", "words", "detail" }, null, null, null);

		// 遍历所有的单词的信息

		while (cursor_englishwords.moveToNext()) {

			int _id = cursor_englishwords.getInt(cursor_englishwords

			.getColumnIndex("_id"));

			String words = cursor_englishwords.getString(cursor_englishwords

			.getColumnIndex("words"));
			String detail = cursor_englishwords.getString(cursor_englishwords

			.getColumnIndex("detail"));

			Map<String, Object> map = new HashMap<String, Object>();

			map.put("_id", _id);

			map.put("words", words);
			map.put("detail", detail);

			list.add(map);
		}
		Log.i("hht", "==" + list.toString());

		return list;
	}

	// 以下代码是更新单词的方法。

	public static boolean updateWords(ContentResolver resolver,
			Map<String, Object> map, int id) {

		String uri_englishwords = "content://com.hht.englishwordsprovider/englishwords";
		ContentValues values = new ContentValues();

		// 修改englishwords表中的数据
		values.put("words", map.get("words").toString());

		values.put("detail", map.get("detail").toString());

		int count1 = resolver.update(Uri.parse(uri_englishwords), values,

		"_id=?", new String[] { id + "" });

		if (count1 > 0) {
			return true;
		} else {
			return false;
		}

	}

	public static void insertWords(ContentResolver resolver,
			Map<String, Object> map) {
		String uri_englishwords = "content://com.hht.englishwordsprovider/englishwords";
		Uri uri = Uri.parse(uri_englishwords);
		ContentValues values = new ContentValues();

		// englishwords向表中添加用户名称信息

		values.put("words", map.get("words").toString());
		values.put("detail", map.get("detail").toString());
		resolver.insert(uri, values);

	}

	// 以下代码是删除englishwords表中单词的方法。
	public static int deleteWords(ContentResolver resolver, String where,
			String[] whereArgs) {
		String uri_englishwords = "content://com.hht.englishwordsprovider/englishwords";
		return resolver.delete(Uri.parse(uri_englishwords), where, whereArgs);
	}
}

在主文件中利用工具类封装的方法进行CRUD操作就行了
  1. package com.hht.homework_testwordsprovider;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import android.app.Activity;  
  8. import android.content.ContentResolver;  
  9. import android.content.Intent;  
  10. import android.database.Cursor;  
  11. import android.os.Bundle;  
  12. import android.view.ContextMenu;  
  13. import android.view.ContextMenu.ContextMenuInfo;  
  14. import android.view.Menu;  
  15. import android.view.MenuItem;  
  16. import android.view.View;  
  17. import android.widget.AdapterView.AdapterContextMenuInfo;  
  18. import android.widget.ListView;  
  19. import android.widget.SimpleAdapter;  
  20.   
  21. import com.hht.homework_testwordsprovider.utils.MyWordsHelper;  
  22.   
  23. public class MainActivity extends Activity {  
  24.   
  25.     private ListView listView_main_words;  
  26.   
  27.     private List<Map<String, Object>> totallist = null;  
  28.   
  29.     private SimpleAdapter adapter = null;  
  30.   
  31.     private Cursor cursor = null;  
  32.   
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.activity_main);  
  37.   
  38.         listView_main_words = (ListView) findViewById(R.id.listView_main_word);  
  39.         this.registerForContextMenu(listView_main_words);  
  40.   
  41.         // 加载适配器  
  42.         totallist = new ArrayList<Map<String, Object>>();  
  43.         adapter = new SimpleAdapter(this, totallist,  
  44.                 R.layout.item_listview_main, new String[] { "_id""words",  
  45.                         "detail" }, new int[] { R.id.textView_id,  
  46.                         R.id.textView_item_words, R.id.textView_item_detail });  
  47.         listView_main_words.setAdapter(adapter);  
  48.         // 适配器数据的填充  
  49.         fillListView(getlist());  
  50.   
  51.     }  
  52.   
  53.     @Override  
  54.     public boolean onCreateOptionsMenu(Menu menu) {  
  55.         // Inflate the menu; this adds items to the action bar if it is present.  
  56.         getMenuInflater().inflate(R.menu.main, menu);  
  57.         return true;  
  58.     }  
  59.   
  60.     @Override  
  61.     public boolean onOptionsItemSelected(MenuItem item) {  
  62.         // TODO Auto-generated method stub  
  63.         switch (item.getItemId()) {  
  64.         // 插入操作  
  65.         case R.id.action_insert:  
  66.             Intent intent = new Intent(MainActivity.this, AddActivity.class);  
  67.             startActivity(intent);  
  68.             break;  
  69.         case R.id.action_query:  
  70.             // 查询操作  
  71.             Intent intent2 = new Intent(MainActivity.this, SearchActivity.class);  
  72.             startActivity(intent2);  
  73.             break;  
  74.         default:  
  75.             break;  
  76.         }  
  77.         return super.onOptionsItemSelected(item);  
  78.     }  
  79.   
  80.     @Override  
  81.     public void onCreateContextMenu(ContextMenu menu, View v,  
  82.             ContextMenuInfo menuInfo) {  
  83.         // TODO Auto-generated method stub  
  84.         super.onCreateContextMenu(menu, v, menuInfo);  
  85.         getMenuInflater().inflate(R.menu.update, menu);  
  86.     }  
  87.   
  88.     @Override  
  89.     public boolean onContextItemSelected(MenuItem item) {  
  90.         // TODO Auto-generated method stub  
  91.         // 上下文菜单的使用,及选择事件的监听  
  92.         AdapterContextMenuInfo info = (AdapterContextMenuInfo) item  
  93.                 .getMenuInfo();  
  94.         switch (item.getItemId()) {  
  95.         case R.id.action_update:  
  96.             // 更新操作  
  97.             Intent intent = new Intent(MainActivity.this, UpdateActivity.class);  
  98.             Bundle bundle = new Bundle();  
  99.             bundle.putInt(  
  100.                     "_id",  
  101.                     Integer.parseInt(totallist.get(info.position).get("_id")  
  102.                             .toString()));  
  103.             bundle.putString("words", totallist.get(info.position).get("words")  
  104.                     .toString());  
  105.             bundle.putString("detail",  
  106.                     totallist.get(info.position).get("detail").toString());  
  107.             intent.putExtras(bundle);  
  108.             startActivity(intent);  
  109.   
  110.             break;  
  111.         case R.id.action_delete:  
  112.             // 删除操作,利用封装的工具类只需要传人指定的参数就行  
  113.             int id = Integer.parseInt(totallist.get(info.position).get("_id")  
  114.                     .toString());  
  115.             ContentResolver resolver = getContentResolver();  
  116.             MyWordsHelper.deleteWords(resolver, "_id=?",  
  117.                     new String[] { id + "" });  
  118.             Intent intent1 = new Intent(MainActivity.this, MainActivity.class);  
  119.             startActivity(intent1);  
  120.             finish();  
  121.             break;  
  122.   
  123.         }  
  124.         return super.onContextItemSelected(item);  
  125.     }  
  126.   
  127.     // 适配器数据更新函数  
  128.     public void fillListView(List<Map<String, Object>> list) {  
  129.         totallist.addAll(list);  
  130.         adapter.notifyDataSetChanged();  
  131.   
  132.     }  
  133.   
  134.     // 获得列表数据,作为ListView的数据源  
  135.     public List<Map<String, Object>> getlist() {  
  136.   
  137.         ContentResolver contentResolver = getContentResolver();  
  138.   
  139.         List<Map<String, Object>> list = MyWordsHelper  
  140.                 .selectWords(contentResolver);  
  141.         return list;  
  142.   
  143.     }  
  144. }  
package com.hht.homework_testwordsprovider;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.hht.homework_testwordsprovider.utils.MyWordsHelper;

public class MainActivity extends Activity {

	private ListView listView_main_words;

	private List<Map<String, Object>> totallist = null;

	private SimpleAdapter adapter = null;

	private Cursor cursor = null;

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

		listView_main_words = (ListView) findViewById(R.id.listView_main_word);
		this.registerForContextMenu(listView_main_words);

		// 加载适配器
		totallist = new ArrayList<Map<String, Object>>();
		adapter = new SimpleAdapter(this, totallist,
				R.layout.item_listview_main, new String[] { "_id", "words",
						"detail" }, new int[] { R.id.textView_id,
						R.id.textView_item_words, R.id.textView_item_detail });
		listView_main_words.setAdapter(adapter);
		// 适配器数据的填充
		fillListView(getlist());

	}

	@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;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		// 插入操作
		case R.id.action_insert:
			Intent intent = new Intent(MainActivity.this, AddActivity.class);
			startActivity(intent);
			break;
		case R.id.action_query:
			// 查询操作
			Intent intent2 = new Intent(MainActivity.this, SearchActivity.class);
			startActivity(intent2);
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		// TODO Auto-generated method stub
		super.onCreateContextMenu(menu, v, menuInfo);
		getMenuInflater().inflate(R.menu.update, menu);
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		// 上下文菜单的使用,及选择事件的监听
		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
				.getMenuInfo();
		switch (item.getItemId()) {
		case R.id.action_update:
			// 更新操作
			Intent intent = new Intent(MainActivity.this, UpdateActivity.class);
			Bundle bundle = new Bundle();
			bundle.putInt(
					"_id",
					Integer.parseInt(totallist.get(info.position).get("_id")
							.toString()));
			bundle.putString("words", totallist.get(info.position).get("words")
					.toString());
			bundle.putString("detail",
					totallist.get(info.position).get("detail").toString());
			intent.putExtras(bundle);
			startActivity(intent);

			break;
		case R.id.action_delete:
			// 删除操作,利用封装的工具类只需要传人指定的参数就行
			int id = Integer.parseInt(totallist.get(info.position).get("_id")
					.toString());
			ContentResolver resolver = getContentResolver();
			MyWordsHelper.deleteWords(resolver, "_id=?",
					new String[] { id + "" });
			Intent intent1 = new Intent(MainActivity.this, MainActivity.class);
			startActivity(intent1);
			finish();
			break;

		}
		return super.onContextItemSelected(item);
	}

	// 适配器数据更新函数
	public void fillListView(List<Map<String, Object>> list) {
		totallist.addAll(list);
		adapter.notifyDataSetChanged();

	}

	// 获得列表数据,作为ListView的数据源
	public List<Map<String, Object>> getlist() {

		ContentResolver contentResolver = getContentResolver();

		List<Map<String, Object>> list = MyWordsHelper
				.selectWords(contentResolver);
		return list;

	}
}

还有几个子文件我就不一一贴出来了,主要是看一下怎样自己自定义ContentProvider及使用自定义的ContentProvider
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值