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開發(fā)之ContentProvider的使用詳解
- Android數(shù)據(jù)持久化之ContentProvider機(jī)制詳解
- Android ContentProvider的實(shí)現(xiàn)及簡(jiǎn)單實(shí)例代碼
- Android開發(fā)教程之ContentProvider數(shù)據(jù)存儲(chǔ)
- android基礎(chǔ)總結(jié)篇之八:創(chuàng)建及調(diào)用自己的ContentProvider
- Android學(xué)習(xí)筆記之ContentProvider和Uri詳解
- 詳解Android ContentProvider的基本原理和使用
相關(guān)文章
Android實(shí)現(xiàn)仿Windows7圖片預(yù)覽窗格效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)仿Windows7圖片預(yù)覽窗格效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android實(shí)現(xiàn)帶圓環(huán)的圓形頭像
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶圓環(huán)的圓形頭像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
kotlin中EditText賦值Type mismatch方式
這篇文章主要介紹了kotlin中EditText賦值Type mismatch方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Android CardView詳解及使用方法和實(shí)例
這篇文章主要介紹了Android CardView詳解及使用方法和實(shí)例的相關(guān)資料,這里附有實(shí)例代碼及實(shí)現(xiàn)效果圖,需要的朋友可以參考下2016-12-12
Android Retrofit 2.0框架上傳圖片解決方案
這篇文章主要介紹了Android Retrofit 2.0框架上傳一張與多張圖片解決方案,感興趣的小伙伴們可以參考一下2016-03-03
Android使用PowerImageView實(shí)現(xiàn)播放強(qiáng)大的ImageView動(dòng)畫效果
今天我們就來(lái)編寫一個(gè)PowerImageView控件,讓它既能支持ImageView控件原生的所有功能,同時(shí)還可以播放GIF圖片2018-05-05
android開發(fā) eclipse alt+”/”自動(dòng)提示失效的解決方法
最近在學(xué)習(xí)android開發(fā)布局這塊。第一次學(xué)習(xí),很多代碼不熟悉。所以自動(dòng)提示對(duì)我來(lái)說(shuō)很重要。但悲催的就是這個(gè)自動(dòng)提示失效。今天在網(wǎng)上搜索了一下解決辦法,主要有一下幾種方法2014-05-05
Android UI設(shè)計(jì)系列之自定義DrawView組件實(shí)現(xiàn)數(shù)字簽名效果(5)
這篇文章主要介紹了Android UI設(shè)計(jì)系列之自定義DrawView組件實(shí)現(xiàn)數(shù)字簽名效果,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Matrix的set,pre,post調(diào)用順序詳解
下面小編就為大家?guī)?lái)一篇Matrix的set,pre,post調(diào)用順序詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04

