【问题标题】:ContentProvider: Cursor returns 0 rowsContentProvider:光标返回 0 行
【发布时间】:2017-09-15 15:30:23
【问题描述】:

我尝试使用 ContentResolver 从表中获取数据:UserDictionary.Words。

无论我做什么,游标中都没有检索到任何行,所以我一直为 cursor.getCount() 获取 0。

我将所需的权限放在清单文件中:
使用权限 android:name="android.permission.READ_CONTACTS"
使用权限 android:name="android.permission.WRITE_CONTACTS"

这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ContentResolver resolver = getContentResolver();
    String[] projection = new String[]{BaseColumns._ID, UserDictionary.Words.WORD};
    Cursor cursor =
            resolver.query(UserDictionary.Words.CONTENT_URI,
                    projection,
                    null,
                    null,
                    null);

    if (cursor.moveToFirst()) {
        do {
            long id = cursor.getLong(0);
            String word = cursor.getString(1);
            // do something meaningful
        } while (cursor.moveToNext());
    }
}

我应该怎么做才能解决这个问题?

【问题讨论】:

  • 您是否在运行时请求所有正确的权限?
  • 你能用安卓应用ContentProviderHelper打开UserDictionary.Words吗?在我的 android-4.4 上它可以查询 UserDictionary.Words

标签: java android


【解决方案1】:

您确定您的词典数据库中有特定的单词吗? 一些手机型号使用自定义键盘,不使用标准的安卓用户词典数据库。

转到设置 -> 语言和输入法 -> 键盘 -> 您使用的键盘。如果没有 Dictionary 部分,很可能您当前的键盘没有将您的特定单词保存到数据库中。

如果您是出于学习目的制作应用程序,则有解决方法。从 GooglePlay 安装 Google 键盘,添加一些特定的字词,然后重试。

附注API 23 问题

报告了另一个已知问题 - API 23 错误 here。因此,如果您的设备运行 API 23,您可以创建具有不同 API 的 android 模拟器并在那里检查您的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多