Android 自定義ContentProvider簡(jiǎn)單實(shí)例
Android 自定義ContentProvider簡(jiǎn)單實(shí)例
Android允許我們定義自己的的ContentProvider對(duì)象來(lái)共享數(shù)據(jù),練練手,簡(jiǎn)單來(lái)實(shí)現(xiàn)一下。
要使用ContentProvider來(lái)操作數(shù)據(jù),必須要有保存數(shù)據(jù)的場(chǎng)所??梢允褂梦募騍QLite數(shù)據(jù)庫(kù)的方式來(lái)保存數(shù)據(jù),通常使用SQLite數(shù)據(jù)庫(kù)。
1,創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)幫助類,歸根結(jié)底都是它在操作數(shù)據(jù)庫(kù)。代碼如下:
package com.njue; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DBManager extends SQLiteOpenHelper { public static final String myProvider_table_name="myProvider_table_name"; String sql="create table myProvider_table_name(id integer,name text)"; public DBManager(Context context) { super(context, "myPrivoder.db", null, 1); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase arg0) { // TODO Auto-generated method stub arg0.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
2,創(chuàng)建一個(gè)myProvider類,該類繼承ContentProvider,實(shí)現(xiàn)其抽象方法來(lái)操作數(shù)據(jù)庫(kù),該類引用DBManager類來(lái)獲得數(shù)據(jù)庫(kù)實(shí)例。
package com.njue; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; public class myProvider extends ContentProvider { DBManager dbHelper; @Override public int delete(Uri arg0, String arg1, String[] arg2) { // TODO Auto-generated method stub SQLiteDatabase db=dbHelper.getWritableDatabase(); int id=db.delete(DBManager.myProvider_table_name, arg1, arg2); if(id!=0)return id; return 0; } @Override public String getType(Uri uri) { // TODO Auto-generated method stub return null; } @Override public Uri insert(Uri uri, ContentValues values) { // TODO Auto-generated method stub SQLiteDatabase db=dbHelper.getWritableDatabase(); db.insert(DBManager.myProvider_table_name, "id", values); return null; } @Override public boolean onCreate() { // TODO Auto-generated method stub dbHelper=new DBManager(getContext()); return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // TODO Auto-generated method stub SQLiteDatabase db=dbHelper.getWritableDatabase(); Cursor c=db.query(DBManager.myProvider_table_name,projection, selection, selectionArgs, null, null, sortOrder); return c; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO Auto-generated method stub SQLiteDatabase db=dbHelper.getWritableDatabase(); int id=db.update(DBManager.myProvider_table_name, values, selection, selectionArgs); if(id!=0)return id; return 0; } }
3,ContextProvider必須聲明才能使用,因此,需要在AndroidManifest.xml配置文件中聲明。聲明很簡(jiǎn)單,需要類名稱和授權(quán)名稱兩個(gè)屬性。
<provider android:name="myProvider" android:authorities="com.njue.myProvider" />
到這里,我們自定義的ContentProvider就完成了。我們可以在Eclipse中的File Explorer 窗口中看到自定義的ContentProvider
4,簡(jiǎn)單測(cè)試
package com.njue; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Content_providerActivity extends Activity { /** Called when the activity is first created. */ Uri uri; String AUTHORITY="content://com.njue.myProvider/myProvider_table_name"; ContentResolver cr; EditText input; Button insert; TextView show; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); input=(EditText)findViewById(R.id.input); insert=(Button)findViewById(R.id.insert); show=(TextView)findViewById(R.id.show); uri=uri.parse(AUTHORITY); cr=this.getContentResolver(); insert.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub ContentValues values=new ContentValues(); values.put("name", input.getText().toString()); cr.insert(uri, values); Cursor c=cr.query(uri, null, null, null, null); show.setText(""); c.moveToFirst(); while(c.moveToNext()){ show.append(c.getString(1)+"\r\n"); } input.setText(""); }}); } }
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- 實(shí)例講解Android中ContentProvider組件的使用方法
- Android應(yīng)用中使用ContentProvider掃描本地圖片并顯示
- Android中自定義ContentProvider實(shí)例
- Android開(kāi)發(fā)之ContentProvider的使用詳解
- Android數(shù)據(jù)持久化之ContentProvider機(jī)制詳解
- Android ContentProvider的實(shí)現(xiàn)及簡(jiǎn)單實(shí)例代碼
- Android開(kāi)發(fā)教程之ContentProvider數(shù)據(jù)存儲(chǔ)
- android基礎(chǔ)總結(jié)篇之八:創(chuàng)建及調(diào)用自己的ContentProvider
- Android學(xué)習(xí)筆記之ContentProvider和Uri詳解
- 詳解Android ContentProvider的基本原理和使用
相關(guān)文章
Android中Fragment的基本用法示例總結(jié)
Fragment是activity的界面中的一部分或一種行為,下面這篇文章主要給大家介紹了關(guān)于Android中Fragment的基本用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-05-05android使用RxJava實(shí)現(xiàn)預(yù)加載
這篇文章主要為大家詳細(xì)介紹了android使用RxJava實(shí)現(xiàn)預(yù)加載的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Android仿微信activity滑動(dòng)關(guān)閉效果
這篇文章主要為大家詳細(xì)介紹了Android仿微信activity滑動(dòng)關(guān)閉的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01詳解Android App中創(chuàng)建ViewPager組件的方法
這篇文章主要介紹了詳解Android App中創(chuàng)建ViewPager組件的方法,ViewPager最基本的功能就是可以使視圖滑動(dòng),需要的朋友可以參考下2016-03-03Android ExpandableListView實(shí)現(xiàn)下拉刷新和加載更多效果
這篇文章主要為大家詳細(xì)介紹了Android ExpandableListView實(shí)現(xiàn)下拉刷新和加載更多效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06Android?8.0實(shí)現(xiàn)藍(lán)牙遙控器自動(dòng)配對(duì)
這篇文章主要為大家詳細(xì)介紹了Android?8.0實(shí)現(xiàn)藍(lán)牙遙控器自動(dòng)配對(duì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08android實(shí)現(xiàn)短按電源鍵關(guān)機(jī)的實(shí)現(xiàn)代碼
這篇文章主要介紹了android實(shí)現(xiàn)短按電源鍵關(guān)機(jī)的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Android使用 Coroutine + Retrofit打造簡(jiǎn)單的HTTP請(qǐng)求庫(kù)
這篇文章主要介紹了Android使用 Coroutine + Retrofit打造簡(jiǎn)單的HTTP請(qǐng)求庫(kù),幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03詳解Android應(yīng)用中屏幕尺寸的獲取及dp和px值的轉(zhuǎn)換
這篇文章主要介紹了Android應(yīng)用中屏幕尺寸的獲取及dp和px值的轉(zhuǎn)換方法,這里主要介紹將dp轉(zhuǎn)化為px值的例子,需要的朋友可以參考下2016-03-03