我如何获得我的内容提供商的_count?

我应该怎么做让我的内容提供商返回logging数量的_count列? 文档说它是自动的,但也许只是关于一些内置的内容提供者。 对数据库运行查询似乎不会返回它。

    如果您正在使用ContentProvider.query()则返回一个Cursor 。 调用Cursor.getCount()获取返回的游标中的logging数。

    如果您正在使用contentProvider,那么您必须像“count(*)AS count”一样来执行操作。 如果使用cursor.getCount(),那将不会像上面的方法那么高效。 使用cursor.getCount(),您只需获取所有logging即可获得计数。 整个代码应该如下所示 –

      Cursor countCursor = getContentResolver().query(CONTENT_URI, new String[] {"count(*) AS count"}, null, null, null); countCursor.moveToFirst(); int count = countCursor.getInt(0); 

    这个工程的原因是因为android需要一个列名来定义。

    我有一个类似的问题,发现这对我有用。 在下面的例子中,我想从MediaStore提供程序获取图像的数量。

      final String[] imageCountProjection = new String[] { "count(" + MediaStore.Images.ImageColumns._ID + ")", }; Cursor countCursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageCountProjection, null, null, null); countCursor.moveToFirst(); int existingImageCount = countCursor.getInt(0); 

    使用cursor.getCount(),您不能确保它返回返回的实际数量。 有更好的方法:

    1-如果您正在使用Content Providers,则可以执行查询并使用BaseColumns中包含的Column(_COUNT)进行投影

     @Override public Cursor query(SQLiteDatabase db, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { ... projection = new String[] { ContentContract.NotificationCursor.NotificationColumns._COUNT, }; ... Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, groupBy, having, sortOrder); return cursor; } 

    2-做一个使用SELECT COUNT(*)作为@saurabh在他的回答中说的rawQuery。