4. 对客户端执行CRUD检查
代码如下

public class MainActivity extends Activity { public static final String TAG = "MainActivity"; private void insertData(Uri providerUrl, int id, String name, String description) { ContentValues values = new ContentValues(); values.put("id", id); // 键值对 values.put("name", name); values.put("description", description); getContentResolver().insert(providerUrl, values); // 必须根据ContentResolver访问内容提供者 } private void updateData(Uri providerUrl, int id, String name, String description) { ContentValues values = new ContentValues(); values.put("id", id); values.put("name", name); values.put("description", description); getContentResolver().update(providerUrl, values, "id = " + id, null); // 第二个参数是where子句 ,null是where子句参数 } private void deleteData(Uri providerUrl, int id) { getContentResolver().delete(providerUrl, "id = " + id, null); // 第二个参数是where子句,null则是其参数 } private void queryData(Uri providerUrl) { Cursor cursor = getContentResolver().query(providerUrl, null, null, null, null); // 查询所有记录 while (cursor.moveToNext()) { // 只要游标没到底 int id = cursor.getInt(cursor.getColumnIndex("id")); // getColumnIndex()根据列名获取列的位置,而后getInt()根据列的位置获取列的值 String userName = cursor.getString(cursor.getColumnIndex("name")); String description = cursor.getString(cursor.getColumnIndex("description")); System.out.println(id + "--" + userName + "--" + description); } cursor.close(); // 莫忘记关游标 System.out.println("----------------------------------"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { Uri providerUrl = PersonProvider.PERSON_URI; insertData(providerUrl, 1, "szc", "a simple boy"); insertData(providerUrl, 2, "jason", "an interesting boy"); queryData(providerUrl); updateData(providerUrl, 2, "dustin", "a brave boy"); queryData(providerUrl); deleteData(providerUrl, 2); queryData(providerUrl); } catch (Exception e) { e.printStackTrace(); } }
5. 查看结果
客户端屏幕截图
服务(提供商)屏幕截图
不同的进程号表示已实现进程间通信
受级别和精力的限制,我没有研究内容提供商的源代码. 我查看了源代码和本文. 我发现客户端contentResolver的insert()方法最终调用了IContentProvider和IContentProvider的insert()方法. 该接口继承了IInterface,似乎AIDL在幕后安卓内容提供者,我没有专门研究
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-271454-2.html
我也遇到过一次
美国只是虚张声势