(android)内容提供者contentprovider(-)
来源:互联网 发布:加工中心倒角c怎么编程 编辑:程序博客网 时间:2024/06/12 19:07
首先什么是内容提供者?内容提供者是Android中的四大组件之一,今天研究了下利用内容提供者查询和修改数据库的数据,虽然简单了点,但也想分享给大家!
首先用android studio创建一model,再新建两个包,一个为provider,另外一个为DBUtil。
在main主页面这样写
<?xml version="1.0" encoding="utf-8"?><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.liuqian.android_24_contentprovider.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/main_edittext_id"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="getData" android:text="获取数据" android:clickable="true"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="updateData" android:text="修改数据" android:clickable="true"/></LinearLayout>
内含两个点击事件,它们的用处接着往下看就知道了
在自己新建的那个DBUtil包里面新建一个工具类,用来连接数据库
package DBUtil;import android.content.Context;import android.database.DatabaseErrorHandler;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by Administrator on 2017/02/07. */public class BDUtil extends SQLiteOpenHelper{ /** * 构造方法 * @param context 上下文 * @param name 数据库名字 * @param factory null * @param version 数据库版本 */ public BDUtil(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } //创建表的操作 调用一次 @Override public void onCreate(SQLiteDatabase db) { //创建表、 db.execSQL("create table student (_id integer primary key autoincrement,name,sex)"); db.execSQL("insert into student (name,sex) values('傻逼1','男')"); db.execSQL("insert into student (name,sex) values('傻逼2','男')"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
然后在自己新建的那个provider包里面新建一个类MyContentProvider,继承ContentProvider,实现方法
然后在清单文件application里做配置就好了,其中包括三个属性name,authorities,exported三个属性,authorities中写这个项目唯一的包名
name写contentProvider这个类的所在位置就好了,而exported值为true就好了
<!--配置内容提供者--><provider android:authorities="com.liuqian.android_24_contentprovider.PERSON" android:name="provider.MyContentProvider" android:exported="true"></provider>下面这个为内容提供者类的内容
package provider;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 android.support.annotation.Nullable;import android.util.Log;import DBUtil.BDUtil;/** * Created by Administrator on 2017/02/07. */public class MyContentProvider extends ContentProvider{ private SQLiteDatabase db; private UriMatcher uriMatcher; @Override public boolean onCreate() { Log.i("test","onCreate"); BDUtil bdUtil=new BDUtil(getContext(),"G1508201.db",null,2); db = bdUtil.getReadableDatabase(); //实例化URI匹配器 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //添加规则// uriMatcher.addURI("com.liuqian.android_24_contentprovider.PERSON","student2",3); //01 查询所有 uriMatcher.addURI("com.liuqian.android_24_contentprovider.PERSON","student",1); //02 查询单个 uriMatcher.addURI("com.liuqian.android_24_contentprovider.PERSON","student/#",2); //添加修改规则 uriMatcher.addURI("com.liuqian.android_24_contentprovider.PERSON","student2",3); return false; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { //根据URI匹配器开始匹配 int code=uriMatcher.match(uri); switch (code){ case 1: //查询所有 return db.query(false,"student",projection,selection,selectionArgs,null,null,sortOrder,null); case 2: //查询单个 long id= ContentUris.parseId(uri); return db.rawQuery("select * from student where _id=?",new String [] {id+""}); } return null; } @Nullable @Override public String getType(Uri uri) { return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues values) { return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int code=uriMatcher.match(uri); if(code==3){// 执行修改语句 db.update("student",values,"",new String [] {}); return 1; } return 0; }}//接下来的步骤也不多了,就是在main那个类里面执行相对应的操作就好了package com.liuqian.android_24_contentprovider;import android.content.ContentResolver;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends AppCompatActivity { private EditText main_edittext_id; private ContentResolver contentResolver; private Uri uri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); main_edittext_id = (EditText) findViewById(R.id.main_edittext_id); //获取内容访问者 contentResolver = getContentResolver(); //insertData(); } private void insertData() { //自动增加数据 ContentValues contentValues=new ContentValues(); contentValues.put("name","嘻哈"); contentValues.put("sex","男"); uri = Uri.parse("content://com.liuqian.android_24_contentprovider.PERSON/student2"); contentResolver.insert(uri,contentValues); } //修改数据 public void updateData(View view){ uri=Uri.parse("content://com.liuqian.android_24_contentprovider.PERSON/student2"); ContentValues values=new ContentValues(); values.put("_id","1"); values.put("name","aa"); values.put("sex","女"); int aa=contentResolver.update(uri,values,"",new String [] {}); if(aa==1){ Toast.makeText(this, "修改成功!", Toast.LENGTH_SHORT).show(); } } //getData public void getData(View view){ //判断输入框的值是否为空 if(TextUtils.isEmpty(main_edittext_id.getText().toString())){ //为空则查询所有 //content:// 为协议 uri = Uri.parse("content://com.liuqian.android_24_contentprovider.PERSON/student"); }else{ //查询单个 /** * 直接query传参 类似web传参 Uri匹配器 */ String id=main_edittext_id.getText().toString(); uri=Uri.parse("content://com.liuqian.android_24_contentprovider.PERSON/student/"+id); } Cursor cursor=contentResolver.query(uri,null,null,null,null); while (cursor.moveToNext()){ int id=cursor.getInt(cursor.getColumnIndex("_id")); String name=cursor.getString(cursor.getColumnIndex("name")); String sex=cursor.getString(cursor.getColumnIndex("sex")); Log.i("test",id+name+sex); } }}·我今天的分享到这来就结束了!本人是第一次发表博客,有异议的话请指正,谢谢!
0 0
- ContentProvider(内容提供者)
- ContentProvider(内容提供者)
- (android)内容提供者contentprovider(-)
- Android内容提供者 --ContentProvider(待写)
- Android组件之ContentProvider(内容提供者)
- android之ContentProvider(内容提供者)
- 内容提供者(ContentProvider)复习
- Android ContentProvider(内容提供者 )+ContentResolver(内容访问者)
- Android ContentProvider(内容提供者)
- android内容提供者ContentProvider
- Android--- ContentProvider(内容提供者)
- Android 内容提供者ContentProvider
- Android内容提供者ContentProvider
- android内容提供者contentProvider
- android ContentProvider内容提供者
- Android-ContentProvider内容提供者
- Android ContentProvider 内容提供者
- android内容提供者ContentProvider
- 你应该了解的基础和2017测试行业的趋势
- Qt之QThread用法
- 51NOD 1109 01组成的N的倍数
- Android FrameWork源码浅析之(二)--转发一篇文章讲binder
- 欢迎使用CSDN-markdown编辑器
- (android)内容提供者contentprovider(-)
- LeetCode500. Keyboard Row我的C++解法
- 面试题-华为-进制转换-3
- poj 2777,hdu 5023 线段树区间染色+lazy+位运算
- 关于GIMP油漆桶工具使用出错的问题
- scrum理解
- 1027. Colors in Mars 解析
- C++的一些知识以及和C语言的不同
- ZCMU-1416-Find the Lost Sock