【问题标题】:Content provider for multiple tables多个表的内容提供程序
【发布时间】:2013-04-04 09:45:54
【问题描述】:

我是 Android 新手,正在为 5 个表实现内容提供程序。 我的问题是: 我应该为每个表或单个表中的多个表都有一个内容提供程序 内容提供商?由于内容提供者只有一个插入、更新、查询、删除方法。

如何在我的应用程序中只包含一个内容提供者?我已经搜索过,在大多数示例中,我只找到一个表应用程序。

我必须在哪里使用切换条件来支持具有相同内容提供程序的多个表?

请给我一些想法。

【问题讨论】:

  • 单次插入、更新、查询、删除这些方法要求表名对吗?那是什么问题
  • 我想在多个表中插入、删除或更新,但内容提供者只有一个插入、一个删除...方法,我该怎么做
  • 为什么不为每个表多次调用这些方法?
  • 如何多次调用这些方法,请举个例子,其实我是android新手所以没有更多的想法,因为这是我的ist应用程序。 @AndroidEnthusiast
  • 与您单次调用的方式相同,请改用 for 循环,更改方法参数。

标签: android android-contentprovider simplecursoradapter


【解决方案1】:

可以使用URI参数:

List<String> android.net.Uri.getPathSegments()

如果您的 URI 是,例如:

content://com.mypackage.MyContentProvider/MyTable

MyTable 将在getPathSegments(); 返回的列表中。

然后您必须在 URI 中指定您的表,并在提供程序中的插入、更新、查询、删除方法中根据 URI 参数构建查询。

为了避免对 URI 进行测试,您可以向您的提供者添加一个名为 getTableName()Abstract 方法,女巫会将您的 tableName 返回为 String

然后将你的provider扩展到5个类Table1ProviderTable2Provider等并实现方法

Class abstract  MyProvider extends ContentProvider{

public abstract String getTableName();

 @Override
  public Cursor query(Uri uri, String[] projection, String selection,
      String[] selectionArgs, String sortOrder) {

   ///...
    // Set the table
    queryBuilder.setTables(getTableName());

    //...
    return cursor;
  }
}

class Table1Provider extend MyProvider{

public String getTableName(){
   return "Table1";
}

然后实例化Table1Provider 而不是抽象提供者。

【讨论】:

  • 意味着我必须使用 switch case 编写所有这些方法。比如 5 个表的 TODO 和 TODO_ID 有 10 个 case ???
  • 使用switch语句有什么问题?
  • 在这个例子中使用 switch 语句不是问题,但是如果你有一个更复杂的例子(witch 是一般的情况)你会有很多“switching”,witch 不是“优雅的” " 在对象语言中
【解决方案2】:

制作一个提供商。使用 Android 提供的 URIMatcher 类将内容 URI 与不同的表进行匹配。

在这里阅读:http://developer.android.com/guide/topics/providers/content-provider-creating.html#ContentURI

【讨论】:

    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 2019-11-23
    • 2011-10-18
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多