实例解析Android系统中的ContentProvider组件用法

2019-12-10 18:12:36于海丽

Android,ContentProvider

A程序:
UserInfo.java

package com.android.xiong.conentprovidertesta; 
 
import android.content.ContentProvider; 
import android.content.ContentValues; 
import android.content.UriMatcher; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.net.Uri; 
 
public class FirstContentProvider extends ContentProvider { 
 
  // UriMatcher类主要用来匹配Uri 
  private static final UriMatcher uriMatcher = new UriMatcher( 
      UriMatcher.NO_MATCH); 
  private MySqlite mysqlite; 
  static { 
    // 注册向外部程序提供的Uri 
    uriMatcher.addURI(UserInfo.AUTOR, "userinfo", 1); 
    uriMatcher.addURI(UserInfo.AUTOR, "userinfoall", 2); 
  } 
  //删除数据 
  @Override 
  public int delete(Uri uri, String selection, String[] selectionArgs) { 
    int number = 0; 
    if (uriMatcher.match(uri) == 1) { 
      // 根据条件删除数据,并获取删除的行数 
      number = mysqlite.getReadableDatabase().delete("user_info", 
          selection, selectionArgs); 
    } 
    // 通知数据已经改变 
    getContext().getContentResolver().notifyChange(uri, null); 
    return number; 
  } 
 
  @Override 
  public String getType(Uri uri) { 
 
    return null; 
  } 
  //插入数据 
  @Override 
  public Uri insert(Uri uri, ContentValues values) { 
    String name = values.getAsString(UserInfo.User.NAME).toString(); 
    String age = values.getAsInteger(UserInfo.User.AGE).toString(); 
    String maxId = "select max(id) id from user_info"; 
    Cursor cursor = mysqlite.getReadableDatabase().rawQuery(maxId, null); 
    cursor.moveToFirst(); 
    int userid = cursor.getInt(0) + 1; 
    if (uriMatcher.match(uri) == 1) { 
 
      mysqlite.getWritableDatabase().execSQL( 
          "insert into user_info values(?,?,?)", 
          new String[] { String.valueOf(userid), name, age }); 
    } 
    return uri; 
  } 
 
  // 连接数据库 
  @Override 
  public boolean onCreate() { 
    mysqlite = new MySqlite(getContext(), "userinfo.db", null, 1); 
    return true; 
  } 
  //查询数据 
  @Override 
  public Cursor query(Uri uri, String[] projection, String selection, 
      String[] selectionArgs, String sortOrder) { 
    SQLiteDatabase sqlite = mysqlite.getReadableDatabase(); 
    String str = "select name,age from user_info"; 
    if (uriMatcher.match(uri) == 1) { 
      str += " where " + selection; 
    } 
    Cursor cursor = sqlite.rawQuery(str, selectionArgs); 
    return cursor; 
  } 
  //修改数据 
  @Override 
  public int update(Uri uri, ContentValues values, String selection, 
      String[] selectionArgs) { 
    SQLiteDatabase sqlite = mysqlite.getReadableDatabase(); 
    int number = 0; 
    if (uriMatcher.match(uri) == 1) { 
      number = sqlite.update("user_info", values, selection, 
          selectionArgs); 
    } 
    return number; 
  } 
 
}