【问题标题】:My custome content provider returns empty cursor我的自定义内容提供程序返回空光标
【发布时间】:2013-07-25 10:37:47
【问题描述】:

我在查询下面有一个非常奇怪的问题是返回一个游标,但计数为 0,尽管我检查过 db 中的数据,

Cursor cursor = context.getContentResolver().query(VueConstants.CONTENT_URI,
    new String[] {"aisleId"}, null, null, null);
Cursor cursor = context.getContentResolver().query(VueConstants.CONTENT_URI,
    null, null, null, null);                                                                              

下面是 ContentProvider 类的查询方法,我用 uri 匹配器覆盖了我的自定义内容提供程序

private static final UriMatcher URIMATCHER;

/** uri matchers for articles table and articles fts3 table query method. */
static {
URIMATCHER = new UriMatcher(UriMatcher.NO_MATCH);
URIMATCHER.addURI(VueConstants.AUTHORITY, VueConstants.AISLES,
    AISLES_MATCH);
URIMATCHER.addURI(VueConstants.AUTHORITY, VueConstants.AISLES
    + "/#", AISLE_MATCH);
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
  String[] selectionArgs, String sortOrder) {
SQLiteDatabase aislesDB = dbHelper.getWritableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
Cursor cursor = null;
String id;

switch (URIMATCHER.match(uri)) {
  case AISLES_MATCH:
    qb.setTables(VueConstants.AISLES);
    cursor = qb.query(aislesDB, projection, selection, selectionArgs,
        null, null, sortOrder);
    Log.e("provider", "Total Aisles marked to Content Provider cursor.getCount()" + cursor.getCount());
    break;
 case AISLE_MATCH:
   qb.setTables(VueConstants.AISLES);
   id = uri.getLastPathSegment();
   cursor = qb.query(aislesDB, projection,
       VueConstants.AISLE_ID+ "=" + id
           + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')'
               : ""), selectionArgs, null, null, null);
    break;
 case AISLE_IMAGES_MATCH:
   qb.setTables(VueConstants.AISLE_IMAGES);
   cursor = qb.query(aislesDB, projection, selection, selectionArgs,
       null, null, sortOrder);
   break;
 case IMAGE_MATCH:
   qb.setTables(VueConstants.AISLE_IMAGES);
   id = uri.getLastPathSegment();
   cursor = qb.query(aislesDB, projection,
       VueConstants.IMAGE_ID+ "=" + id
           + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')'
               : ""), selectionArgs, null, null, null);
   break;
 case LOOKING_FOR_TABLE_MATCH:
   qb.setTables(VueConstants.LOOKING_FOR_TABLE);
   cursor = qb.query(aislesDB, projection, selection, selectionArgs,
       null, null, sortOrder);
   break;
 case LOOKING_FOR_ROW_MATCH:
   qb.setTables(VueConstants.LOOKING_FOR_TABLE);
   id = uri.getLastPathSegment();
   cursor = qb.query(aislesDB, projection,
       VueConstants.ID+ "=" + id
           + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')'
               : ""), selectionArgs, null, null, null);
   break;
 case OCCATION_TABLE_MATCH:
   qb.setTables(VueConstants.OCCASION_TABLE);
   cursor = qb.query(aislesDB, projection, selection, selectionArgs,
       null, null, sortOrder);
   break;
 case OCCATION_ROW_MATCH:
   qb.setTables(VueConstants.OCCASION_TABLE);
   id = uri.getLastPathSegment();
   cursor = qb.query(aislesDB, projection,
       VueConstants.ID+ "=" + id
           + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')'
               : ""), selectionArgs, null, null, null);
 break;
 case CATEGORY_TABLE_MATCH:
   qb.setTables(VueConstants.CATEGORY_TABLE);
   cursor = qb.query(aislesDB, projection, selection, selectionArgs,
       null, null, sortOrder);
   break;
 case CATEGORY_ROW_MATCH:
   qb.setTables(VueConstants.CATEGORY_TABLE);
   id = uri.getLastPathSegment();
   cursor = qb.query(aislesDB, projection,
       VueConstants.ID+ "=" + id
           + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')'
               : ""), selectionArgs, null, null, null);
   break;
 case COMMENTS_TABLE_MATCH:
   qb.setTables(VueConstants.COMMENTS_ON_IMAGES_TABLE);
   cursor = qb.query(aislesDB, projection, selection, selectionArgs,
       null, null, sortOrder);
   break;
 case COMMENTS_ROW_MATCH:
   qb.setTables(VueConstants.COMMENTS_ON_IMAGES_TABLE);
   id = uri.getLastPathSegment();
   cursor = qb.query(aislesDB, projection,
       VueConstants.ID+ "=" + id
           + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')'
               : ""), selectionArgs, null, null, null);
   break;

}
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;

}

【问题讨论】:

    标签: android android-contentprovider android-sqlite


    【解决方案1】:

    VueConstants.CONTENT_URI 的值是多少? 您是否尝试过像这样的 Uri:

    "content://"+VueConstants.AUTHORITY+"/"+ VueConstants.AISLES+"/1"
    
    "content://"+VueConstants.AUTHORITY+"/"+ VueConstants.AISLES
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多