上海市有几个区,关键词优化费用,省直部门门户网站建设,广告发布资质1#xff0c;内容URI 在Android系统中#xff0c;Content URI是一种用于唯一标识和访问应用程序中的数据的方法。它由Android系统提供#xff0c;通过Content Provider来实现数据的共享和访问。
Content URI使用特定的格式来标识数据#xff0c;通常以content://内容URI 在Android系统中Content URI是一种用于唯一标识和访问应用程序中的数据的方法。它由Android系统提供通过Content Provider来实现数据的共享和访问。
Content URI使用特定的格式来标识数据通常以content://开头后面跟着由Content Provider定义的数据路径和标识ID。例如联系人数据的Content URI可能如下所示
联系人的URIcontent://com.android.contacts/contacts 某个联系人的URIcontent://com.android.contacts/contacts/1 其中com.android.contacts是联系人的Content Provider的名称contacts是数据表的名称1是联系人的ID。
注意Content URI由2个部分组成authority和path。authority是用于对不同应用程序做区分一般采用程序的包名方式来命名比如com.exemple.app。path则用于同一应用程序不同的表做区分。比如/table1,/table2.
在Android中将内容URI解析为URI对象非常简单。可以使用Uri类的静态方法parse()来解析内容URI字符串并将其转换为Uri对象。
以下是将内容URI解析为URI对象的示例代码
String contentUriString content://com.example.app/data;
Uri uri Uri.parse(contentUriString);在上面的代码中我们定义了一个内容URI字符串content://com.example.app/data然后使用Uri.parse()方法将其解析为Uri对象。解析后的Uri对象可以用于后续的ContentResolver操作如查询、插入、更新等。
需要注意的是解析后的Uri对象是不可变的即无法对其进行修改。如果需要更改URI可以创建一个新的Uri对象或使用Uri.Builder类来构建一个新的URI。同时也需要注意在使用Content Provider时需要遵循相应的权限和安全机制以确保数据的安全性和隐私性。
总之将内容URI解析为URI对象是Android开发中常见的操作之一它可以帮助我们更好地访问和操作应用程序中的数据
2ContentResolver的基本用法
ContentResolver是Android中用于访问各种内容提供者Content Provider的接口。内容提供者是一种共享应用程序数据的机制它允许一个应用程序访问和操作其他应用程序的数据。实现跨进程共享数据。
以下是ContentResolver的基本用法
1获取ContentResolver对象
ContentResolver contentResolver getContentResolver();2使用ContentResolver查询数据
Cursor cursor contentResolver.query(uri, projection, selection, selectionArgs, sortOrder);* uri要查询的数据的URI。
* projection要检索的列的名称。可以指定一个包含列名的数组。如果该值为null则会返回所有列。
* selectionSQL查询语句的一部分用于指定要检索的行。通常使用“?”占位符来避免SQL注入攻击。
* selectionArgsSQL查询语句中的占位符的值。这是一个字符串数组可以为每个占位符提供一个值。
* sortOrder用于对结果进行排序的SQL查询语句。可以指定一个字符串例如name ASC。如果不指定则结果将按默认顺序返回。3处理查询结果
* 使用moveToFirst()方法将光标移动到结果集的第一个条目。
* 使用getCount()方法获取结果集中的条目数。
* 使用getString(columnIndex)、getInt(columnIndex)等方法获取特定列的值。4关闭Cursor对象
cursor.close();在使用完Cursor对象后应始终关闭它以释放相关资源。
除了查询数据ContentResolver还可以用于插入、更新和删除数据。这些操作通常使用ContentValues对象来传递数据并使用Uri对象指定要操作的URI。例如
插入数据
Uri uri contentResolver.insert(uri, contentValues);更新数据
int rowsUpdated contentResolver.update(uri, contentValues, selection, selectionArgs);删除数据
int rowsDeleted contentResolver.delete(uri, selection, selectionArgs);在Android中ContentResolver是一个接口它提供了访问和操作内容提供者Content Provider中数据的方法。以下是一个使用ContentResolver的完整参考代码其中包括查询、插入、更新和删除数据的操作
// 获取ContentResolver对象
ContentResolver contentResolver getActivity().getContentResolver(); // 1. 查询数据
// 定义URI和查询条件
Uri uri Uri.parse(content://com.example.app/data);
String selection name ?;
String[] selectionArgs new String[]{John}; // 查询数据
Cursor cursor contentResolver.query(uri, null, selection, selectionArgs, null); // 处理查询结果
if (cursor ! null cursor.moveToFirst()) { String name cursor.getString(cursor.getColumnIndex(name)); String age cursor.getString(cursor.getColumnIndex(age)); // 处理查询结果...
} // 关闭Cursor对象
if (cursor ! null) { cursor.close();
} // 2. 插入数据
// 定义URI和插入数据
Uri newUri contentResolver.insert(uri, new ContentValues()); // 处理插入结果
if (newUri ! null) { // 处理插入结果...
} // 3. 更新数据
// 定义URI和更新条件以及更新数据
Uri updateUri Uri.parse(content://com.example.app/data/1);
ContentValues values new ContentValues();
values.put(age, 31); int rowsUpdated contentResolver.update(updateUri, values, null, null); // 处理更新结果
if (rowsUpdated 0) { // 处理更新结果...
} // 4. 删除数据
// 定义URI和删除条件
Uri deleteUri Uri.parse(content://com.example.app/data/1);
int rowsDeleted contentResolver.delete(deleteUri, null, null); // 处理删除结果
if (rowsDeleted 0) { // 处理删除结果...
}在上面的代码中我们首先获取了一个ContentResolver对象然后分别进行了查询、插入、更新和删除数据的操作。需要注意的是在实际开发中我们需要根据具体的应用程序和数据结构来定义相应的URI和查询条件以及处理查询结果、插入结果、更新结果和删除结果的方法。同时也需要注意在使用Content Provider时需要遵循相应的权限和安全机制。
3创建内容提供器
在Android中创建内容提供器Content Provider的步骤如下
1创建一个新的类继承自ContentProvider类。 2在AndroidManifest.xml文件中声明内容提供器的权限以便其他应用程序能够访问数据。 3在AndroidManifest.xml文件中注册内容提供器包括指定提供器的名称、权限和数据源等信息。 4实现ContentProvider类中的抽象方法包括onCreate()、getType()、insert()、update()、delete()和query()等。 5在需要访问内容提供器的应用程序中使用ContentResolver类来获取数据。 需要注意的是内容提供器的实现需要了解Android系统的内部机制和权限管理等方面的知识因此需要有一定的开发经验和技术水平。同时为了确保数据的安全性和隐私性需要对数据访问进行适当的控制和授权。
以下是一个简单的Android内容提供器的开发代码例子
首先创建一个新的类继承自ContentProvider类并实现抽象方法
public class MyContentProvider extends ContentProvider { private SQLiteDatabase db; Override public boolean onCreate() { db SQLiteDatabase.openOrCreateDatabase(mydatabase.db, null); return true; } Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // 执行查询操作返回查询结果 return db.query(mytable, projection, selection, selectionArgs, null, null, sortOrder); } Override public String getType(Uri uri) { // 返回数据类型 return vnd.android.cursor.dir/mydata; } Override public Uri insert(Uri uri, ContentValues values) { // 执行插入操作返回插入数据的URI long rowId db.insert(mytable, null, values); return Uri.parse(content://com.example.app.provider/ rowId); } Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // 执行更新操作返回更新记录的数量 return db.update(mytable, values, selection, selectionArgs); } Override public int delete(Uri uri, String selection, String[] selectionArgs) { // 执行删除操作返回删除记录的数量 return db.delete(mytable, selection, selectionArgs); }
}然后在AndroidManifest.xml文件中声明内容提供器的权限和注册信息
manifest xmlns:androidhttp://schemas.android.com/apk/res/android packagecom.example.app application provider android:name.MyContentProvider android:authoritiescom.example.app.provider / /application
/manifest最后在需要访问内容提供器的应用程序中使用ContentResolver类来获取数据
ContentResolver contentResolver getActivity().getContentResolver();
Cursor cursor contentResolver.query(Uri.parse(content://com.example.app.provider/mytable), null, null, null, null);
if (cursor ! null cursor.moveToFirst()) { String name cursor.getString(cursor.getColumnIndex(name)); String age cursor.getString(cursor.getColumnIndex(age)); // 处理查询结果...
}
cursor.close();注意getType方法用于获取uri对象所对应的mime类型。一个内容uri对应的MIME类型由3个部分组成 1必须以vnd开头。 2如果内容uri以路径结尾则后面接android.cursor.dir/,如果内容uri以id结尾则后面接vendor.cursor.item/ 3,最后接上vnd.. 比如对应content://com.example.app.provider/mytable这个内容uri对应的MIME类型写成vnd.android.cursor.dir/mydata