android contentprovider案例
时间: 2023-06-30 20:05:59 浏览: 53
ContentProvider 是 Android 中的一种组件,它提供了一个标准的接口,允许应用程序在不同的进程之间共享数据。下面是一个简单的 ContentProvider 示例,用于提供用户信息:
1. 创建一个 User 类,代表用户信息:
```java
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
2. 创建一个 UserProvider 类,继承自 ContentProvider,并实现必要的方法:
```java
public class UserProvider extends ContentProvider {
private static final String AUTHORITY = "com.example.userprovider";
private static final String BASE_PATH = "users";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH);
private List<User> users;
@Override
public boolean onCreate() {
users = new ArrayList<>();
users.add(new User("Alice", 25));
users.add(new User("Bob", 30));
return true;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection,
@Nullable String[] selectionArgs, @Nullable String sortOrder) {
MatrixCursor cursor = new MatrixCursor(new String[]{"_id", "name", "age"});
int id = 0;
for (User user : users) {
cursor.addRow(new Object[]{id++, user.getName(), user.getAge()});
}
return cursor;
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return "vnd.android.cursor.dir/vnd.example.users";
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
String name = values.getAsString("name");
int age = values.getAsInteger("age");
users.add(new User(name, age));
return CONTENT_URI;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
users.clear();
return 0;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection,
@Nullable String[] selectionArgs) {
String name = values.getAsString("name");
int age = values.getAsInteger("age");
users.clear();
users.add(new User(name, age));
return 1;
}
@Override
public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) {
for (ContentValues value : values) {
String name = value.getAsString("name");
int age = value.getAsInteger("age");
users.add(new User(name, age));
}
return values.length;
}
}
```
3. 在 AndroidManifest.xml 中声明 ContentProvider:
```xml
<provider
android:name=".UserProvider"
android:authorities="com.example.userprovider"
android:exported="true"/>
```
4. 在应用程序中使用 ContentProvider:
```java
ContentResolver resolver = getContentResolver();
Uri uri = UserProvider.CONTENT_URI;
// 查询所有用户信息
Cursor cursor = resolver.query(uri, null, null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.d(TAG, "name: " + name + ", age: " + age);
}
// 插入一个新用户
ContentValues values = new ContentValues();
values.put("name", "Charlie");
values.put("age", 35);
resolver.insert(uri, values);
// 更新第一个用户信息
ContentValues updateValues = new ContentValues();
updateValues.put("name", "Alice");
updateValues.put("age", 26);
resolver.update(ContentUris.withAppendedId(uri, 0), updateValues, null, null);
```
以上就是一个简单的 ContentProvider 示例。通过 ContentProvider,我们可以在不同的应用程序中共享数据,从而提高应用程序之间的互操作性。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)