2013-04-04 110 views
4

我是Android新手,正在为5个表格实施内容提供者。 我的问题是: 我是否应该为每个表格或一个 内容提供者中的多个表格提供内容提供者?由于Content Provider有一个插入,更新,查询,删除方法。多个表格的内容提供者

如何在应用程序中只包含一个Content Provider?我已经搜索并在大多数例子中,我只找到一个表的应用程序。

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

请给我一些想法。

+0

单一插入,更新,查询,删除这些方法问表的名字吧?那么问题是什么 – AAnkit 2013-04-04 09:51:12

+1

我想在多个表中插入或删除或更新,但内容提供商只有一个插入,一个删除...方法,所以我该怎么做 – user 2013-04-04 09:53:39

+0

为什么不多次调用这些方法每张桌子? – AAnkit 2013-04-04 11:47:35

回答

1

可以使用URI参数:

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

如果你的URI,例如:

content://com.mypackage.MyContentProvider/MyTable 

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

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

为了避免对URI的测试,你可以添加到您提供商摘要方法称为getTableName()女巫将返回你tableNameString

那么你的供应商扩大到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而不是抽象的提供商。

+0

意味着我必须使用开关大小写所有这些方法。像TODO和TODO_ID为5表格有10种情况? – user 2013-04-04 10:59:29

+0

更新以避免开关盒测试 – Simo 2013-04-04 12:25:22

+0

使用开关语句有什么问题? – 2013-06-30 18:35:17