使用内容提供商将一个db的内容复制到另一个db

时间:2012-07-03 15:28:08

标签: android sqlite android-contentprovider android-contentresolver

我正在尝试使用this方法将数据库内容从我的免费应用程序复制到我的付费应用程序,但我在最后一步中迷失了方法:

检查提供者是否存在&将数据加载到付费应用中。

我可以检查是否存在提供者:

    List<ProviderInfo> providers = getPackageManager().queryContentProviders(
    "com.mypackagename.content.MyProvider",android.os.Process.myUid(), 0);

但我不知道怎么做复制?

我尝试过这样的ContentResolver:

    ContentResolver resolver = getContentResolver();
    ContentProviderClient client = resolver.acquireContentProviderClient(Uri.parse("content://com.mypackagename"));

我还没有能够测试这个,但即使它有效,我也不知道下一步了。我是怎么想把数据从一个数据库中取出来的?

1 个答案:

答案 0 :(得分:1)

所以我解决了这个问题。这根本不是太棘手。

我使用ContentProviderClient代码处于正确的轨道上。

ContentResolver resolver = getContentResolver();
ContentProviderClient client = resolver.acquireContentProviderClient(Uri.parse("content://com.mypackagename.free"));

然后你需要你要复制的表的URI,我相信这些必须是硬编码的。

Uri CONTENT_URI_TABLE1 = Uri.parse("content://com.mypackagename.free/table1");

然后您需要查询客户端

Cursor table1Cursor = client.query(CONTENT_URI_TABLE1, null, null, null, null);

现在你需要一个可以从游标创建对象的函数,然后遍历游标创建项目,然后将它们添加到数据库中。在查询表之后,您可能已经有了这个来创建项目。

table1Cursor.moveToFirst();
FancyItem tempItem = providerUtils.createFancyItemFromCursor(table1Cursor);

然后使用您之前使用的任何功能将此临时项添加到新数据库中。

    providerUtils.addFancyItem(tempItem);

通过光标迭代,就是这样。