【问题标题】:ContentProvider database variables, where to put them?ContentProvider 数据库变量,放在哪里?
【发布时间】:2013-05-10 10:29:08
【问题描述】:

考虑:

public static final String NOTE_ID = "_id";
public static final String TITLE = "title";
public static final String TEXT = "text";

上面显示的我的 sqlite 数据库中的 3 列用于内容提供程序,我应该将它们放在下面的代码中的什么位置?最好的地方在哪里?

我应该在扩展 BaseColumns 的 NoteItems 类中添加什么?

在哪里放什么有点困惑。

public class ProviderExample extends ContentProvider {

private static final String DATABASE_NAME = "notes.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "notes";
public static final String AUTHORITY = "package   com.example.contentproviderexample.providerexample";

public static final UriMatcher sUriMatcher;

private static final int NOTES = 1;

private static final int NOTES_ID = 2;

public static final Uri CONTENT_URI = Uri.parse("content://"
        + AUTHORITY + "/notes");

     static final String SINGLE_RECORD = "vnd.android.cursor.item/vnd.example.providerexample";
     static final String MULTIPLE_RECORDS = "vnd.android.cursor.dir/vnd.example.providerexample";

 static {
        sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        sUriMatcher.addURI(AUTHORITY, TABLE_NAME, NOTES);
        sUriMatcher.addURI(AUTHORITY, TABLE_NAME + "/#", NOTES_ID);
    }

    public static interface NoteItems extends BaseColumns { }

    private static class DatabaseHelper extends SQLiteOpenHelper{
    DatabaseHelper(Context context)
    {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {}

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub
    }
} // DatabaseHelper

编辑:

我缩小了选择范围。看起来最好有 2 个地方放置此代码。一个是在 ProviderExample 中扩展 ContentProvider 类以及其他变量,另一个位置是在 DatabaseHelper 中扩展 SQLiteOpenHelper 类,两者都是可能的,但我不知道这两个地方哪个更正确。我找到了两种使用方式的示例。

【问题讨论】:

  • 题名请不要加Android,底部的tag就够了。

标签: android sqlite android-contentprovider


【解决方案1】:

上面显示的我的 sqlite 数据库中的 3 列用于内容 提供者,我在哪里把这些放在下面的代码中?哪里最好 地点?

我应该在扩展 BaseColumns 的 NoteItems 类中添加什么?

这不是真正需要回答的问题。我可以说把它们放在班级的最后,我怀疑它会对你有帮助。

使用ContentProvider 时,一个好主意是使用Contract 类/接口,在其中放置所有与提供程序相关的常量,以便于访问/更改以及(可能)公开发布(如果您允许提供程序供其他应用程序使用)。这部分包含在 android 开发者网站上的guide for providers 中,我强烈建议您阅读。

我会将NotesItems 接口移动到它自己的文件中,并将所有常量放入其中(至少是您提到的那些)并使用NotesItems._ID 等访问它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多