ContentProvider
来源:互联网 发布:mac 未能存储文稿 编辑:程序博客网 时间:2024/06/15 19:49
内容的提供者(ContentProvider)
1.作用:
暴露本应用的私有数据,供其他应用使用。通过继承ContentProvider。
暴露本应用的私有数据,供其他应用使用。通过继承ContentProvider。
有选择地暴露插入、删除、修改和查询本应用数据的接口。
2.使用:
继承ContentProvider抽象类,并选择性地增删改查方法
继承ContentProvider抽象类,并选择性地增删改查方法
需要在清单文件中配置
authorities为包名
name为继承ContentProvider的那个类
authorities为包名
name为继承ContentProvider的那个类
<!--配置内容提供者-->
<provider
android:authorities="com.zking.administrator.g160618_android16_sqlite.LOGIN"
android:name=".MyProvider"
android:exported="true"
></provider>
<provider
android:authorities="com.zking.administrator.g160618_android16_sqlite.LOGIN"
android:name=".MyProvider"
android:exported="true"
></provider>
内容访问者(ContentResolver)
1. 作用
访问内容提供者,并解析返回的数据
访问内容提供者,并解析返回的数据
2. 使用
通过上下文对象获取内容解析者
通过上下文对象获取内容解析者
ContentResolver resolver = this.getContentResolver();
下面举一个实例,只在调用,操作时打印结果。
新建一个Moudle:
新建一个db连接数据库的包DBHelper
package com.zking.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;/** * Created by Administrator on 2017/6/27 0027. */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 db) { Log.i("test","创建表"); db.execSQL("create table login(uid integer primary key autoincrement,uname,upass)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i("test","升级"); }// @Override// public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {// super.onDowngrade(db, oldVersion, newVersion);// }}
在activity_main.xml中这样写
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zking.administrator.g160618_android16_sqlite.MainActivity"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="用户名:" android:id="@+id/et_main_uname" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密码:" android:id="@+id/et_main_upass" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="操作" android:onClick="operation" /></LinearLayout>
然后在与xml相对应的java代码中MainActivity添加数据到数据库中
package com.zking.administrator.g160618_android16_sqlite;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.Toast;import com.zking.db.DBHelper;public class MainActivity extends AppCompatActivity { private EditText et_main_uname; private EditText et_main_upass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_main_uname = (EditText) findViewById(R.id.et_main_uname); et_main_upass = (EditText) findViewById(R.id.et_main_upass); } public void operation(View view){ String uname=et_main_uname.getText().toString(); String upass=et_main_upass.getText().toString(); DBHelper dbHelper=new DBHelper(this,"G160618.db",null,2); SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase(); //添加1 for (int i = 0; i <100 ; i++) { sqLiteDatabase.execSQL("insert into login(uname,upass) values('"+uname+i+"','"+upass+"')"); } //添加2// ContentValues values=new ContentValues();// values.put("uname",uname);// values.put("upass",upass);// values.putNull("uid");// sqLiteDatabase.insert("login","uname",values); //删除 //sqLiteDatabase.delete("login","uid=?",new String[]{102+""}); //修改// ContentValues values=new ContentValues();// values.put("uname",uname);// values.put("upass",upass);// sqLiteDatabase.update("login",values,"uid=?",new String[]{101+""}); //查询所有 int pageNo=2; //第一页 int pageSize=5; //每页5条 //minus// Cursor cursor=sqLiteDatabase.rawQuery("select * from login limit ?,?",new String[]{((pageNo-1)*pageSize)+"",pageSize+""});// while(cursor.moveToNext()){// int uid=cursor.getInt(cursor.getColumnIndex("uid"));// String name=cursor.getString(cursor.getColumnIndex("uname"));// String pass=cursor.getString(cursor.getColumnIndex("upass"));// Log.i("test",uid+" "+name+" "+pass);// } Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show(); }}
新建java MyProvider文件把内容提供出去
package com.zking.administrator.g160618_android16_sqlite;import android.content.ContentProvider;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.util.Log;import com.zking.db.DBHelper;/** * Created by Administrator on 2017/7/17 0017. */public class MyProvider extends ContentProvider { @Override public boolean onCreate() { Log.i("test","onCreate"); return false; } @Nullable @Override public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { Log.i("test","query"); //把数据查询出来 DBHelper dbHelper=new DBHelper(getContext(),"G160618.db",null,2); SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase(); //sqLiteDatabase.rawQuery("select * from login",null); return sqLiteDatabase.rawQuery("select * from login",null); } @Nullable @Override public String getType(@NonNull Uri uri) { Log.i("test","getType"); return null; } @Nullable @Override public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { Log.i("test","insert"); return null; } @Override public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) { Log.i("test","delete"); return 0; } @Override public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) { Log.i("test","update"); return 0; }}
最后在xml里面对内容提供者进行配置,加上这样一句代码
<!--配置内容提供者--> <provider android:authorities="com.zking.administrator.g160618_android16_sqlite.LOGIN" android:name=".MyProvider" android:exported="true" ></provider>
然后再新建一个Moudle对提供的内容进行访问
在MainActivity中对内容进行访问
package com.zking.administrator.g160618_android25_contentresolver;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取16次课的数据 //获取内容访问者 ContentResolver cr=getContentResolver(); Uri uri=Uri.parse("content://com.zking.administrator.g160618_android16_sqlite.LOGIN"); Cursor cursor=cr.query(uri,null,null,null,null); while(cursor.moveToNext()){ int uid=cursor.getInt(cursor.getColumnIndex("uid")); String uname=cursor.getString(cursor.getColumnIndex("uname")) ; String upass=cursor.getString(cursor.getColumnIndex("upass")) ; Log.i("test",uid+" "+uname+" "+upass); } }}
阅读全文
0 0
- ContentProvider
- ContentProvider
- ContentProvider
- ContentProvider
- contentProvider
- ContentProvider
- ContentProvider
- ContentProvider
- contentprovider
- ContentProvider
- ContentProvider
- ContentProvider
- ContentProvider
- ContentProvider
- contentprovider
- contentprovider
- ContentProvider
- ContentProvider
- 邻接表构建模板
- 作业7.17
- Jni内存释放
- Perf
- 在qdialog中实现增加toolbar
- ContentProvider
- 09读书笔记之提升ListView的运行效率
- 七月的无奈
- 记忆化搜索:POJ1088-滑雪(经典的记忆化搜索)
- git reset简介
- java实现简单链表
- linux-bash 归档数据文件
- 重新装修了博客
- POJ 1466 Girls and Boys(二分图最大独立集)