Android ContentProvider的基本使用1(内容提供者)
来源:互联网 发布:java内容管理系统 编辑:程序博客网 时间:2024/04/29 12:53
一个人做到只剩了回忆的时候,生涯大概总要算是无聊了吧,但有时竟会连回忆也没有。
鲁迅《朝花夕拾》
今天我们来了解一下ContentProvider 底层做法
内容提供者三要素:1 内容(数据)
2 名字(唯一)
3开放
ContentProvider 内容提供者 数据都在系统自带的表里,所以手机要Root 没有Root就看不到表
Db类
public class DbHelper extends SQLiteOpenHelper { /** * * @param context 上下文 * @param name 名字(数据库名),文件名 * @param factory 游标工厂,多数情况:null * @param version 数据库版本 */ public DbHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); Log.i("test","构造"); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { //操作:创建表的操作 Log.i("test","创建表"); sqLiteDatabase.execSQL("create table person(_id integer primary key autoincrement,name,age)"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log.i("test","数据库版本,低--->高"); }}
MainActivity
public class MainActivity extends ListActivity { private EditText et_main_id; private EditText et_main_name; private EditText et_main_age; private SQLiteDatabase database; private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_id = (EditText) findViewById(R.id.et_main_id); et_main_name = (EditText) findViewById(R.id.et_main_name); et_main_age = (EditText) findViewById(R.id.et_main_age); listview = getListView(); //GO //Java //php DbHelper dbHelper=new DbHelper(this,"G150831.db",null,2); database = dbHelper.getReadableDatabase(); //Hibernate session //查询数据 //cursor 游标 Cursor cursor=database.query(false,"person",null,null,null,null,null,null,"2,2"); //List<Person> //循环游标,---。List<Map<Styring,?>> //BaseAdapter SimpleAdater SimpleCursorAdapter simpleCursorAdapter=new SimpleCursorAdapter(this,R.layout.item_listview,cursor,new String[]{"_id","name","age"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age}); listview.setAdapter(simpleCursorAdapter);// database.rawQuery() } public void save(View view){ String name=et_main_name.getText().toString(); String age=et_main_age.getText().toString(); //存到数据库// ContentValues values=new ContentValues();//Map// values.put("name",name);// values.put("age",age);// values.putNull("_id");// database.insert("person","name",values); //HQL QBC 纯(原) for (int i = 0; i <100 ; i++) { database.execSQL("insert into person values(null,?,?)",new String[]{name+i,age}); } Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show(); }}
MyProvider
public class MyProvider extends ContentProvider { private SQLiteDatabase sqLiteDatabase; private UriMatcher uriMatcher; private static final int PERSONS = 1; private static final int PERSON = 2; @Override public boolean onCreate() { Log.i("test", "onCreate"); DbHelper dbHelper = new DbHelper(getContext(), "G150831.db", null, 2); sqLiteDatabase = dbHelper.getReadableDatabase(); //实例化Uri匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //添加匹配规则 //http://locahost:8080/xxx/ooo.action uriMatcher.addURI("com.zking.g150831_android16_sqlite.person", "persons", MyProvider.PERSONS); uriMatcher.addURI("com.zking.g150831_android16_sqlite.person", "persons/#", MyProvider.PERSON); return false; } @Nullable @Override public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) { Log.i("test", "query"); int code = uriMatcher.match(uri); switch (code) { case MyProvider.PERSONS: Log.i("test", "query所有"); //查询所有数据 return sqLiteDatabase.query(true, "person", strings, s, strings1, null, null, s1, null); case MyProvider.PERSON: Log.i("test", "query单个"); //获取#的值 long id = ContentUris.parseId(uri); return sqLiteDatabase.rawQuery("select * from person where _id=?", new String[]{id + ""}); } return null; } @Nullable @Override public String getType(Uri uri) { Log.i("test", "getType"); return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues values) { Log.i("test", "insert"); return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { Log.i("test", "delete"); return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.i("test", "update"); return 0; }}
在清单文件中配置
<!--配置内容提供者--> <provider android:authorities="com.zking.g150831_android16_sqlite.person" android:name="com.zking.provider.MyProvider" android:exported="true" ></provider>
ContentResolver 内容访问者
activity_main
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" 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" android:orientation="vertical" tools:context="com.zking.risk_android_contentresolver.MainActivity"> <EditText android:id="@+id/et_main_id" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="getData" android:text="获取数据" /></LinearLayout>
Main
public class MainActivity extends AppCompatActivity { private ContentResolver cr; private EditText et_main_id; private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取内容访问者 cr = getContentResolver(); et_main_id = (EditText) findViewById(R.id.et_main_id); } public void getData(View view){ if(TextUtils.isEmpty(et_main_id.getText())){ //查询所有 // uri = Uri.parse("content://com.zking.g150831_android16_sqlite.person/persons"); }else{ //查询单个 String id=et_main_id.getText().toString(); uri = Uri.parse("content://com.zking.g150831_android16_sqlite.person/persons/"+id); } Cursor cursor=cr.query(uri,null,null,null,null); //查询单个 //01. 条件_id=3 //02. 网页:?id=4 //03.URI匹配器 //SimpleCursorAdapter while(cursor.moveToNext()){ int id=cursor.getInt(cursor.getColumnIndex("_id")); String name=cursor.getString(cursor.getColumnIndex("name")); int age=cursor.getInt(cursor.getColumnIndex("age")); Log.i("test",id+" "+name+" "); } }}
0 0
- Android ContentProvider的基本使用1(内容提供者)
- [Android Pro] 内容提供者ContentProvider的基本使用
- 内容提供者ContentProvider的基本使用
- 内容提供者ContentProvider的基本使用
- 内容提供者ContentProvider的基本使用
- Android中内容提供者ContentProvider的使用
- Android 内容提供者ContentProvider的使用
- Android里内容提供者ContentProvider的使用
- 内容提供者,ContentProvider的使用
- ContentProvider内容提供者的使用
- Android开发13——内容提供者ContentProvider的基本使用
- 【Android基础】内容提供者ContentProvider的使用详解
- Android知识梳理之ContentProvider内容提供者的使用
- Android ContentProvider(内容提供者)
- android内容提供者ContentProvider
- Android--- ContentProvider(内容提供者)
- Android 内容提供者ContentProvider
- Android内容提供者ContentProvider
- Windows7旗舰版+Visual Studio2013的OpenGl配置
- Reactive Programming with RxJava-Chapter2:Reactive Extensions
- var a=b=5;
- 洛谷 P1403 [AHOI2005]约数研究
- 0221HTML学习_框架
- Android ContentProvider的基本使用1(内容提供者)
- 使用react/lib/update 对数据进行操作
- 《放牛班的春天》
- Python学习笔记之三:lambda表达式,filter函数,map函数
- Android之内容提供者-- 获取联系人和短信信息
- 单链表的基本操作
- 项目中更改注释格式配置
- android activity以dialog形式展现,强大的原生!有图片
- DOM