android+自定义中文加盘,Android自定义ContentProvider

Android 系统支持任意应用程序创建自己的 ContentProvider,以便于将应用程序的数据对其他应用程序共享。

创建应用程序自己的 ContentProvider 需要以下几个步骤:

1)当前应用程序必须具有自己的持久化数据,例如文件存储或者使用 SQLite 数据库存储。

2)当前应用程序需要实现 ContentProvider 的子类,并通过该子类完成对持久化数据的访问。

3)在 AndroidManifest.xml 文件中使用 标签声明当前应用程序定义的 ContentProvider。此外,还可以在 AndroidManifest.xml 文件中指定相应的访问权限,以保证该 ContentProvider 仅被具有相应权限的应用程序访问。若不指定访问权限,则任意其他应用程序都可以访问该 ContentProvider。

在实际的应用中,为了方便应用程序所定义的 ContentProvider 被其他应用程序使用,通常会定义一个类,将 ContentProvider 相关信息以静态常量的方式放置到该类中。这样,使用该 ContentProvider 的应用程序只要将该类引用进来,就可以获取该 ContentProvider 的相关信息,进而通过其对数据进行操作。

本节以 Android SQLite 数据库操作实例教程中使用的实例 MyDbDemo 为例,为该实例中创建的 SQLite 数据库 mydb 中的 friends 数据表创建 ContentProvider,以便于其他应用程序通过该 ContentProvider 对 friends 数据表中的数据进行访问。

在实例 MyDbDemo 中的 introduction.android.mydbDemo 包下创建两个文件,分别为 MyDbProvider.java 和 MyFriendsDB.java。

MyDbProvider 继承了 ContentProvider 类,实现了针对 mydb 的 friends 数据表的相关操作。MyFriendsDB 中包含涉及 MyDbProvider 的相关信息。

MyDbProvider.java 的代码如下:

package introduction.android.mydbdemo;

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.database.sqlite.SQLiteQueryBuilder;

import android.net.Uri;

import android.util.Log;

public class MyDbProvider extends ContentProvider {

private dbHelper mydbHelper;

private static final UriMatcher myUriMatcher;

static {

myUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

myUriMatcher.addURI(MyFriendsDB.AUTHORITY, "friends", MyFriendsDB.FRIENDS);

myUriMatcher.addURI(MyFriendsDB.AUTHORITY, "friends/#", MyFriendsDB.FRIENDS_ID);

}

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

// TODO Auto-generated method stub

if (myUriMatcher.match(uri) != MyFriendsDB.FRIENDS_ID) {

throw new IllegalArgumentException("Wrong Insert Type: " + uri);

}

String id = uri.getPathSegments().get(1);

if (selection == null)

selection = MyFriendsDB.ID + "=" + id;

else

selection = MyFriendsDB.ID + "=" + id + " and " + selection;

SQLiteDatabase db = mydbHelper.getWritableDatabase();

int i = db.delete(dbHelper.TB_NAME, selection, selectionArgs);

if (i > 0)

Log.i("myDbDemo", "数据更新成功!");

else

Log.i("myDbDemo", "数据未更新!");

return i;

}

@Override

public String getType(Uri uri) {

// TODO Auto-generated method stub

switch (myUriMatcher.match(uri)) {

case MyFriendsDB.FRIENDS:

return MyFriendsDB.CONTENT_TYPE;

case MyFriendsDB.FRIENDS_ID:

return MyFriendsDB.CONTENT_ITEM_TYPE;

default:

hrow new IllegalArgumentException("Unknown URI get type: " + uri);

}

}

@Override

public Uri insert(Uri uri, ContentValues values) {

// TODO Auto-generated method stub

if (myUriMatcher.match(uri) != MyFriendsDB.FRIENDS) {

throw new IllegalArgumentException("Wrong Insert Type: " + uri);

}

if (values == null) {

throw new IllegalArgumentException("Wrong Data.");

}

SQLiteDatabase db = mydbHelper.getWritableDatabase();

long rowId = db.insert(MyFriendsDB.TABLE_NAME, null, values);

if (rowId > 0) {

Uri insertUri = ContentUris.withAppendedId(MyFriendsDB.CONTENT_URI, rowId);

return insertUri;

}

return null;

}

@Override

public boolean onCreate() {

// TODO Auto-generated method stub

mydbHelper = new dbHelper(getContext(),MyFriendsDB.DATABASE_NAME, null, MyFriendsDB.DATABASE_VERSI0N);

return false;

}

@Override

public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {

// TODO Auto-generated method stub

switch (myUriMatcher.match(uri)) {

case MyFriendsDB.FRIENDS:

break;

case MyFriendsDB.FRIENDS_ID:

Log.d("MyDbProvider", "select id");

String id = uri.getPathSegments().get(1);

if (selection == null)

selection = MyFriendsDB.ID + "=" + id;

else

selection = MyFriendsDB.ID + "=" + id + " and " + selection;

break;

default:

throw new IllegalArgumentException("Unknown URI type: " + uri);

}

if (sortOrder == null)

sortOrder = "_id ASC";

SQLiteDatabase db = mydbHelper.getReadableDatabase();

Cursor c = db.query(MyFriendsDB.TABLE_NAME, projection, selection, selectionArgs,null,null, sortOrder);

Log.d("MyDbProvider", "" + c.getCount());

return c;

}

@Override

public int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {

// TODO Auto-generated method stub

if (myUriMatcher.match(uri) != MyFriendsDB.FRIENDS_ID) {

throw new IllegalArgumentException("Wrong Insert Type: " + uri);

}

if (values == null) {

throw new IllegalArgumentException("Wrong Data.");

}

String id = uri.getPathSegments().get(1);

if (selection == null)

selection = MyFriendsDB.ID + "=" + id;

else

selection = MyFriendsDB.ID + "=" + id + " and " + selection;

SQLiteDatabase db = mydbHelper.getWritableDatabase();

int i = db.update(dbHelper.TB_NAME, values, selection, selectionArgs);

if (i > 0)

Log.i("myDbDemo ", "数据更新成功! ");

else

Log.i("myDbDemo", "数据未更新!");

return i;

}

}

MyFriendsDB.java 的代码如下:

package introduction.android.mydbdemo;

import android.net.Uri;

public class MyFriendsDB {

public static final String AUTHORITY = "introduction.android.mydbdemo.myfriendsdb";

public static final String DATABASE_NAME = "mydb";

public static final int DATABASE_VERSI0N = 1;

public static final String TABLE_NAME = "friends";

public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/friends");

public static final int FRIENDS = 1;

public static final int FRIENDS_ID = 2;

public static final String CONTENT_TYPE = "vnd.android.cursor.dir/mydb.friends.all";

public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.dir/mydb.friends.item";

public static final String ID = "_id";

public static final String NAME = "name";

public static final String AGE = "age";

}

这样,就定义了针对 mydb 的 friends 数据表的 ContentProvider,最后需要在 AndroidManifest.xml 文件中添加该 ContentProvider 的相应声明和访问权限。AndroidManifest.xml 的代码如下:

package="introduction.android.mydbdemo"

android:versionCode="1"

android:versionName="1.0">

uses-sdk android:minSdkVersion="14" />

uses-permission android:name="introduction.android.permission.USE_MYDB" />

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">

provider

android:name="MyDbProvider"

android:authorities="introduction.android.mydbdemo.MyFriendsDB" />

activity android:name=".MainActivity">

action android:name="android.intent.action.MAIN" />

category android:name="android.intent.category.LAUNCHER" />

/activity>

/application>

该文件通过如下代码:

指明该 ContentProvider 名为 MyDbProvider,该 ContentProvider 的 Authority 为 introduction.android.mydbdemo.myfriendsdb。

通过如下代码:

指明该 ContentProvider 的权限为 introduction.android.permission.USE_MYDB,只有具有该权限的应用程序才可以访问该 ContentProvider。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值