25.ContentProvider自定义内容提供者与ContentResolver内容访问者
来源:互联网 发布:ansible.cfg mac 编辑:程序博客网 时间:2024/06/06 00:08
一.知识概括
二.案例
两个demo
一个专门用来提供数据 ContentProvider内容提供者(存在:数据库)
另一个demo专门用来访问数据 ContentResolver内容访问者
把Android25_ContentProvider里面的数据提供出去
具体代码实现如下
android25_contentprovider项目
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.android25_contentprovider.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>MainActivity.java
package com.zking.android25_contentprovider;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.EditText;import com.zking.db.DBHelper;public class MainActivity extends AppCompatActivity { private EditText et_main_uname; private EditText et_main_upass; private SQLiteDatabase sqLiteDatabase; @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); //拿到DBHelper这个类 DBHelper dbHelper=new DBHelper(this,"databaseName.db",null,1); sqLiteDatabase = dbHelper.getWritableDatabase(); } //点击事件 public void operation(View view){//保存 //一点就拿到用户名和密码 String uname=et_main_uname.getText().toString(); String upass=et_main_upass.getText().toString(); //添加100条测试数据 for (int i = 0; i <100 ; i++) { sqLiteDatabase.execSQL("insert into login(uname,upass) values('第"+i+"个人','123')"); } //分页 int pageNo=2;//拿第几页 int pageSize=3;//每页拿几条// 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, "查看成功", Toast.LENGTH_SHORT).show(); }}DBHelper.java
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/25 0025. * 数据库(不需要指定数据类型,没有用户名 密码等这个概念) */public class DBHelper extends SQLiteOpenHelper{ /** * 构造:4个参数 * @param context 上下文 * @param name 数据库的名字,sqlite数据库本质也是一个文件 这个name也被称为“文件名” 一般以.db为结尾 * @param factory 数据库工厂,一般为null * @param version 数据库的版本(例如加表的情况,1.0版本,2.0版本等) */ 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)");//创建表的sql语句 主键:primary key 自动增长:autoincrement } //数据库版本升级 低-->高(想加一个表,及版本从1.0改为2.0自动调用此方法) @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i("test","升级数据库版本"); } //降级:3.0版本改为2.0版本(一般情况下不会存在)// @Override// public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {// super.onDowngrade(db, oldVersion, newVersion);// }}MyProvider.java
package com.zking.provider;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;/** * 我的内容提供者 * */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 dbHelper=new DBHelper(getContext(),"databaseName.db",null,1);//getContext()上下文对象 SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); return sqLiteDatabase.rawQuery("select * from login",null);//没有参数为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; }}AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zking.android25_contentprovider"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--配置内容提供者--> <provider android:authorities="com.zking.android25_contentprovider.ZHONGZI" android:name="com.zking.provider.MyProvider" android:exported="true" > </provider><!--作者(网址 包名.种子网): exported:可访问--> </application></manifest>
android25_contentresolver项目
MainActivity.java
package com.zking.android25_contentresolver;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;/** * 内容访问者(实际生活中用的比内容提供者多) * 应用程序一启动就拿数据 */public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取android25_contentprovider的数据 //获取内容访问者 ContentResolver cr=getContentResolver(); //content协议:域名 Uri uri=Uri.parse("content://com.zking.android25_contentprovider.ZHONGZI"); //传参 //cr.query(uri,null,null,null,null); Cursor cursor=cr.query(uri,null,null,null,null); while(cursor.moveToNext()){//拿值 String uname=cursor.getString(cursor.getColumnIndex("uname")) ;//列名可以改为用下标0,1,2等 Log.i("test",uname); } }}
效果图
阅读全文
0 0
- 25.ContentProvider自定义内容提供者与ContentResolver内容访问者
- ContentProvider内容提供者与ContentResolver内容访问者
- ContentProvider内容提供者与ContentResolver内容访问者
- ContentProvider内容提供者与ContentResolver内容访问者
- ContentProvider(内容提供者)与ContentResolver(内容访问者)
- ContentProvider内容提供者与ContentResolver内容访问者(二)
- Android之ContentProvider(内容的提供者)与ContentResolver(内容访问者)
- ContentProvider内容提供者 和 ContentResolver内容访问者
- Android----ContentProvider(内容提供者) ContentResolver(内容访问者)
- ContentProvider内容提供者和ContentResolver内容访问者
- ContentProvider内容提供者和ContentResolver内容访问者
- ContentProvider内容提供者和ContentResolver内容访问者
- Android 中ContentProvider内容提供者和ContentResolver内容访问者
- 内容提供者 ContentProvider 内容访问者 ContentResolver 框架搭建
- Android:内容提供者(ContentProvider)和内容访问者(ContentResolver)
- Android ContentProvider(内容提供者 )+ContentResolver(内容访问者)
- android的与ContentResolver(内容访问者)对ContentProvider(内容提供者)的增删查改
- 给大家简述下ContentProvider(内容提供者)与ContentResolver(内容访问者)如何使用。
- spring-开篇
- 吉几三的俺ら东京さ行ぐだ歌词
- CodeForces 831 B.Keyboard Layouts(水~)
- 找不同程序
- spark环境运行程序遇到几个坑
- 25.ContentProvider自定义内容提供者与ContentResolver内容访问者
- AndroidStudio logcat颜色设置
- Python2与Python3中关于最上层类继承上的一点小差异
- JS特效之简单动画封装
- 关于Delphi中Published和Public的区别
- linux系统虚拟机的安装与调试
- PC端windows与虚拟机linux之间文件的传输方式总结
- 使MFC中的ListCtrl控件的列宽固定不可变
- Mac下secureCRT连接VMware Fusion上面的虚拟机超时的解决方法