【问题标题】:Update ListView based on SQLite backed ContentProvider基于 SQLite 支持的 ContentProvider 更新 ListView
【发布时间】:2013-11-25 05:20:26
【问题描述】:

我是一名新的 Android 开发人员,似乎有点不知所措。当我向列表中添加更多内容时,我正在尝试更新 listView。

ListView 基于 SQLite 数据库。通过为 SQLite 数据库创建一个 ContentProvider(建议 here),我能够使 ListView 基于 SQLite 数据库。现在我的问题是我想更新 SQLite 数据库并将其反映在 ListView 上。我正在使用加载器,根据this,如果我正确实施加载器,它将监控数据。

我尝试直接更新 SQLite 数据库,但这并没有导致 ListView 在不关闭和重新打开的情况下更新。我的直觉是我应该在我的 contentProvider 中实现 insert 方法。我做了一个非常简单的实现:

    @Override
    public Uri insert(Uri uri, ContentValues contentValues) {
        return ContentUris.withAppendedId(uri, mCollectionDB.insertCollection(contentValues));
}

不幸的是,结果是我的应用程序因“java.lang.NullPointerException”而崩溃。这尤其令人困惑,因为使用完全相同的 contentValues 使 MainActivity 中的 .insertCollection 调用正常工作。

我真正感兴趣的问题是当我将数据插入我的 SQLite 数据库时如何让我的 listView 更新。如果插入 ContentProvider 无关紧要,请忽略它。我不太确定哪里出错了,所以我不确定还有哪些其他代码可能有用,但如果有帮助,我很乐意编辑更多代码。

【问题讨论】:

  • 您找到解决方案了吗?
  • 我的问题是我声明了一个新的内容提供者,而不是使用 getCntentResolver()。有关更多详细信息,请参阅我对已接受答案的评论。虽然,实际上我只是需要阅读更多有关相关 android 工具的信息。因此,阅读链接的教程很有帮助。

标签: android android-sqlite android-contentprovider android-loadermanager android-loader


【解决方案1】:

【讨论】:

  • 从那些我发现我的问题。我使用的是:CollectionProvider collectionProvider = new CollectionProvider(); collectionProvider.insert(CollectionProvider.CONTENT_URI, valuesNewTable); 而不是 getContentResolver().insert(CollectionProvider.CONTENT_URI, valuesNewTable);
【解决方案2】:

here 是将数据插入sqlite数据库并在列表视图中显示的一个示例。 看看吧

这个想法是简单地将数据插入数据库,然后单击视图按钮使用包含已插入数据的 arraylist 初始化列表视图。

如果您还有其他疑问,可以询问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多