- 浏览: 124674 次
文章分类
- 全部博客 (65)
- web验证码 (0)
- 工具类 (4)
- android基础 (17)
- android通信 (1)
- JFreeChart (1)
- java基础 (5)
- android控件 (4)
- FusionCharts (1)
- android Layout (1)
- json (2)
- HTTP协议 (1)
- cmd (1)
- struts (3)
- Spring (1)
- java网络编程 (3)
- Linux (1)
- DB (5)
- Open Source (1)
- css (0)
- javascript (7)
- jquery (0)
- Socket (1)
- ajax (1)
- 整合开发 (1)
- UDP协议 (1)
最新评论
-
hy18710385392:
亲:import com.nudms.server.nurse ...
java实现打印PDF文件解决方案 -
osacar:
MyPDFPrintPage这个类能提供下?
java实现打印PDF文件解决方案 -
井底之龙:
请问楼主定义的保存Button从开始到最后都没有从xml文件中 ...
Android之SharedPreferences的使用 保存用户设置 -
lohasle:
liangzb0614 写道你好,求一个MyPDFPrintP ...
java实现打印PDF文件解决方案 -
liangzb0614:
你好,求一个MyPDFPrintPage 类!拜托了liang ...
java实现打印PDF文件解决方案
摘自李刚<疯狂android>备份学习使用
首先我们为该contentprovider定义一个工具类,该类中只是包含一个public static的常量,该工具类的代码如下:
上面的工具类只是定义了一些简单的工具类,这个工具类的作用就是告诉其他应用程序,访问该contentprovider的一些常用入口。
数据库创建MyDatabaseHelper代码:
接下来我们开发一个contentprovider的子类,并重写其中的增、删、改、查等方法,类代码如下。
上面的dictProvider类很简单,它除了继承系统的contentprovider之外,还实现了操作数据的增、删、改、查等方法,那木该contentprovider就开发完成了。
接下来需要在androidmanifest.xml文件中注册该contentprovider,这就需要在androidmanifest.xml文件中增加如下配置片段:
至此,暴露生词本数据的contentprovider开发完成。为了测试该contentprovider的开发是否成功,接下来再开发一个应用程序,该应用程序将会通过contentresolver来操作生词本中的数据。
该程序同样提供了添加生词、查询生词的功能,只是改程序并不保存数据,而是访问前面dictProvider所共享的数据,下面是contentresolver的类的代码。
工程代码见附件
首先我们为该contentprovider定义一个工具类,该类中只是包含一个public static的常量,该工具类的代码如下:
import android.net.Uri; import android.provider.BaseColumns; public final class Words { //定义该contentprovider的authority public static final String AUTHORITY = "org.crazyit.providers.dictprovider"; //定义一个静态内部类 public static final class Word implements BaseColumns{ //定义content所允许操作的三个数据列 public static final String _ID = "_id"; public static final String WORD = "word"; public static final String DETAIL = "detail"; //定义该content提供服务的两个Uri public static final Uri DICT_CONTETN_URI = Uri.parse("content://" + AUTHORITY + "/words"); public static final Uri WORD_CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/word"); } }
上面的工具类只是定义了一些简单的工具类,这个工具类的作用就是告诉其他应用程序,访问该contentprovider的一些常用入口。
数据库创建MyDatabaseHelper代码:
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class MyDatabaseHelper extends SQLiteOpenHelper{ private final String CREATE_TABLE_SQL= "create table dict(_id integer primary key autoincrement, word , detail)"; public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE_SQL); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { System.out.println("--------onUpdate Called--------" + oldVersion + "----->" + newVersion); } }
接下来我们开发一个contentprovider的子类,并重写其中的增、删、改、查等方法,类代码如下。
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; import com.dictprovider.content.Words; import com.mydatabasehelper.database.MyDatabaseHelper; public class DictProvider extends ContentProvider{ private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); private static final int WORDS = 1; private static final int WORD = 2; private MyDatabaseHelper dbOpenHelper; static{ matcher.addURI(Words.AUTHORITY, "words", WORDS); matcher.addURI(Words.AUTHORITY, "word/#", WORD); } //第一次调用该DictProvider时,系统先创建DictProvider对象,并回调该方法 @Override public boolean onCreate() { dbOpenHelper = new MyDatabaseHelper(this.getContext(), "myDict.db3", null, 1); return true; } @Override public Uri insert(Uri uri, ContentValues values) { //获得数据库实例 SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); long rowId = db.insert("dict", Words.Word._ID, values); //如果插入成功则返回uri if(rowId > 0){ //在已有的Uri的后面追加ID数据 Uri wordUri = ContentUris.withAppendedId(uri, rowId); //通知数据已经改变 getContext().getContentResolver().notifyChange(wordUri, null); return wordUri; } return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); //记录所删除的记录数 int num = 0; //对uri进行匹配 switch(matcher.match(uri)){ case WORDS:{ num = db.delete("dict", selection, selectionArgs); break; } case WORD:{ long id = ContentUris.parseId(uri); String where = Words.Word._ID + "=" + id; //如果原来的where子句存在,拼接where子句 if(selection != null && !selection.equals("")){ where = where + " and " + selection; } num = db.delete("dict", where, selectionArgs); break; } } getContext().getContentResolver().notifyChange(uri, null); return num; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); int num = 0; switch(matcher.match(uri)){ case WORDS:{ num = db.update("dict", values, selection, selectionArgs); break; } case WORD:{ long id = ContentUris.parseId(uri); String where = Words.Word._ID + "=" + id; if(selection != null && !"".equals(selection)){ where = where + " and " + selection; } num = db.update("dict", values, where, selectionArgs); break; } } getContext().getContentResolver().notifyChange(uri, null); return num; } @Override public String getType(Uri uri) { switch(matcher.match(uri)){ case WORDS:{ return "vnd.android.cursor.dir/org.crazyit.dict"; } case WORD:{ return "vnd.android.cursor.item/org.crazyit.dict"; } } return null; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); switch(matcher.match(uri)){ case WORDS:{ return db.query("dict", projection, selection, selectionArgs, null, null, sortOrder); } case WORD:{ long id = ContentUris.parseId(uri); String where = Words.Word._ID + "=" + id; if(selection != null && !selection.equals("")){ where = where + " and " + selection; } return db.query("dict", projection, selection, selectionArgs, null, null, sortOrder); } } return null; } }
上面的dictProvider类很简单,它除了继承系统的contentprovider之外,还实现了操作数据的增、删、改、查等方法,那木该contentprovider就开发完成了。
接下来需要在androidmanifest.xml文件中注册该contentprovider,这就需要在androidmanifest.xml文件中增加如下配置片段:
<provider android:name="com.dictprovider.provider.DictProvider" android:authorities="org.crazyit.providers.dictprovider"/>
至此,暴露生词本数据的contentprovider开发完成。为了测试该contentprovider的开发是否成功,接下来再开发一个应用程序,该应用程序将会通过contentresolver来操作生词本中的数据。
该程序同样提供了添加生词、查询生词的功能,只是改程序并不保存数据,而是访问前面dictProvider所共享的数据,下面是contentresolver的类的代码。
import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; 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.widget.EditText; import android.widget.Toast; import com.dictprovider.content.Words; import com.dictprovider.observer.WordObserver; public class MainActivity extends Activity { ContentResolver contentResolver; Button insert = null; Button search = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取系统contentresolver对象 contentResolver = getContentResolver(); getContentResolver().registerContentObserver(Uri.parse("content://" + Words.AUTHORITY), true, new WordObserver(this,new Handler())); insert = (Button)findViewById(R.id.insert); search = (Button)findViewById(R.id.search); insert.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String word = ((EditText)findViewById(R.id.word)).getText().toString(); String detail = ((EditText)findViewById(R.id.detail)).getText().toString(); //插入生词记录 ContentValues values = new ContentValues(); values.put(Words.Word.WORD, word); values.put(Words.Word.DETAIL, detail); contentResolver.insert(Words.Word.DICT_CONTETN_URI, values); Toast.makeText(MainActivity.this, "insert success", Toast.LENGTH_SHORT).show(); } }); search.setOnClickListener(new OnClickListener() { //获取用户输入 @Override public void onClick(View v) { String key = ((EditText)findViewById(R.id.key)).getText().toString(); //执行查询 Cursor cursor = contentResolver.query( Words.Word.DICT_CONTETN_URI, null, "word like ? or detail like ?", new String[]{"%" + key + "%", "%" + key + "%"}, null); //创建一个bundle对象 Bundle data = new Bundle(); data.putSerializable("data", converCursorToList(cursor)); Intent intent = new Intent(MainActivity.this, ResultActivity.class); intent.putExtras(data); startActivity(intent); } }); } private ArrayList<Map<String, String>> converCursorToList(Cursor cursor){ ArrayList<Map<String, String>> result = new ArrayList<Map<String,String>>(); while(cursor.moveToNext()){ Map<String, String> map = new HashMap<String, String>(); map.put(Words.Word.WORD, cursor.getString(1)); map.put(Words.Word.DETAIL, cursor.getString(2)); result.add(map); } return result; } }
工程代码见附件
- DictProvider.7z (884 KB)
- 下载次数: 8
发表评论
-
Android 中OpenGL的使用
2013-06-18 22:48 2437android为openGL ES支持提供了GLSurface ... -
android 之GestureOverlayView手势识别
2013-05-28 00:18 2368android 之GestureOverlayView ... -
android 之ViewPager左右滑动切换界面
2013-05-26 23:49 2519这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包 ... -
Android之SharedPreferences的使用 保存用户设置
2013-05-18 18:56 2405SharedPreferences是Android平台上一个轻 ... -
android手机内存中的文件操作
2013-05-18 08:47 1306android为手机存储范围内的文件操作提供了openFile ... -
contentprovider--读取写入联系人数据
2013-04-05 17:39 1631本文主要使用contentprovider实现读取写入联系人数 ... -
android读写XML
2013-01-08 11:08 997详细代码看附件! 布局文件: <RelativeL ... -
android检测网络是否正常
2012-05-17 23:18 1822按照惯例,先上图后代码 在实际开发中,尤其是在网络应用 ... -
Android Handler详解
2012-05-16 10:55 1411/*** * Handler的定义: ... -
android之OnScrollListener 下拉刷新
2012-05-12 20:47 2770先看看效果图吧 1.首先创建一个头部xml文件 < ... -
android之WebView的使用
2012-05-09 23:50 1249为了先体验一下效果,截了一个图 main.xml < ... -
android之PopupWindow
2012-05-03 15:57 2554用的豌豆荚截图,本来是个动画的,每个过程都有几张,大概 ... -
android之OnGestureListener实现图片的左右滑动
2012-04-24 22:07 3392先来看看效果图吧 welcome_glide.xml ... -
android解析json(2)
2012-04-17 23:57 1468两种android解析json的例子 第一个事件是androi ... -
JSON在android中的应用(1)
2012-04-16 23:47 1315android框架已经为我们集成了解析json的包 先一个简 ... -
android实现淡入淡出欢迎界面
2012-03-03 21:34 4433本例子会实现想手机QQ和酷狗那样的淡入淡出的欢迎界面 im ...
相关推荐
将任务01生词本作业中生成的生词本数据库通过自定义ContentProvider的方式,共享给其他应用。 要求如下: (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交作业应列出操作数据的Uri及数据表的字段名称; (3) ...
"使用ContentProvider共享数据"这个主题涉及到如何构建和使用ContentProvider来开放数据库,以及如何通过ContentResolver来执行对这些共享数据的操作。 首先,理解ContentProvider的结构至关重要。ContentProvider...
`ContentProvider`是Android系统中用于不同应用程序间共享数据的一种核心组件。在本实验中,我们将学习如何创建和使用`ContentProvider`,以及如何通过`ContentResolver`和`ContentObserver`来与`ContentProvider`...
该文件中有两个应用,db应用通过ContentProvider对外提供数据共享,other应用提供测试代码对数据进行增删改查。 参考博客:http://blog.csdn.net/tan313/article/details/44338425
* 数据共享:ContentProvider 允许不同的应用程序之间共享数据,从而实现数据的共享和重用。 * 数据安全:ContentProvider 可以对数据进行保护,以免其他应用程序未经授权地访问数据。 * 灵活性:ContentProvider ...
本教程将深入探讨如何使用ContentProvider来实现数据共享。 ### 一、ContentProvider基本概念 1. **组件角色**:ContentProvider作为Android四大组件之一,主要负责数据的读写操作,提供统一的接口供其他应用调用...
下面将详细介绍ContentProvider数据共享的基本使用方法。 1. 创建ContentProvider 要创建一个ContentProvider,你需要继承`android.content.ContentProvider`类,并重写其中的关键方法,如`onCreate()`, `query()`,...
本篇将深入探讨如何使用ContentProvider对外共享数据以及如何监听内容提供者中的数据变化。 一、ContentProvider基础 ContentProvider是Android四大组件之一,它负责管理应用程序的数据,并提供统一的接口供其他...
ContentProvider提供了一种标准化的机制,使得不同的应用程序可以安全、有序地访问和共享数据,无论这些数据是存储在SQLite数据库、文件系统还是其他持久化存储中。下面我们将深入探讨ContentProvider的工作原理及其...
本教程将深入探讨如何利用ContentProvider实现数据共享。 一、ContentProvider基础 1. **定义与作用**:ContentProvider是一个接口,应用程序通过实现这个接口来提供对外的数据服务。它封装了数据访问逻辑,使得...
`ContentProvider` 是Android提供的一种机制,允许应用间安全地共享数据。本篇将详细讲解如何利用`ContentProvider`来共享`SharedPreferences`的值。 首先,理解`SharedPreferences`。它是Android系统提供的一种轻...
#### 使用 ContentProvider 共享数据的基本步骤 1. **创建 ContentProvider 类**:首先,需要创建一个继承自 `ContentProvider` 的类,并实现其中的方法。 2. **配置 ContentProvider**:在 `AndroidManifest.xml` ...
通过深入理解ContentProvider的工作原理和实际操作,开发者可以更好地在不同应用之间共享数据,提高应用间的协同能力。 ContentProvider是Android系统提供的一种标准接口,允许应用程序之间安全地共享数据。它为...
ContentProvider 是 Android 实现跨程序共享数据的标准方式,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。本文将详细介绍 ContentProvider 的主要功能、运行时...
在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据。ContentProvider构建在SQLite数据库之上,提供了标准的接口,使得一个应用的数据可以被其他应用访问和操作。本篇文章将详细阐述如何...
在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地访问和操作数据...在实际开发中,掌握ContentProvider的使用能让你更好地管理和共享应用数据,提升用户体验。