具有自定义查询的Android ContentProvider不显示数据

具有自定义查询的Android ContentProvider不显示数据,android,android-sqlite,android-contentprovider,Android,Android Sqlite,Android Contentprovider,今天我很困惑,因为我的自定义内容提供商没有按预期工作。也就是说,我的三星S5安卓4.4.2没有显示列表中的任何数据。但是,更令人困惑的是,在Android模拟器Genymotion中,它使用的是同一个Android版本。为什么? private static final String AUTHORITY = "[PACKAGE_NAME].helper.db.provider.PublicationContentProvider"; public static final Uri CONTENT

今天我很困惑,因为我的自定义内容提供商没有按预期工作。也就是说,我的三星S5安卓4.4.2没有显示列表中的任何数据。但是,更令人困惑的是,在Android模拟器Genymotion中,它使用的是同一个Android版本。为什么?

private static final String AUTHORITY = "[PACKAGE_NAME].helper.db.provider.PublicationContentProvider";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + PublicationColumns.TABLE_NAME);

public static final int PUBLICATIONS = 1;
public static final int PUBLICATION_ID = 2;

private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);

static {
    sURIMatcher.addURI(AUTHORITY, PublicationColumns.TABLE_NAME, PUBLICATIONS);
    sURIMatcher.addURI(AUTHORITY, PublicationColumns.TABLE_NAME + "/#", PUBLICATION_ID);
}

private static final Map<String, String> sProjectionMap = new HashMap<String, String>();

static {
    sProjectionMap.put(PublicationColumns._ID, PublicationColumns.KEY_FULL_ID);
    sProjectionMap.put(PublicationColumns.KEY_PUBLICATION_CODE, PublicationColumns.KEY_FULL_PUBLICATION_CODE);
    sProjectionMap.put(PublicationColumns.KEY_PUBLICATION_NAME, PublicationColumns.KEY_FULL_PUBLICATION_NAME);
    sProjectionMap.put(PublicationColumns.KEY_PUBLICATION_THUMBNAIL, PublicationColumns.KEY_FULL_PUBLICATION_THUMBNAIL);
}

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();

    String query = "SELECT " + PublicationColumns.KEY_FULL_ID + ", " + PublicationColumns.KEY_FULL_PUBLICATION_NAME + ", "
            + PublicationColumns.KEY_FULL_PUBLICATION_CODE + ", " + PublicationColumns.KEY_FULL_PUBLICATION_THUMBNAIL
            + " FROM " + PublicationColumns.TABLE_NAME + " WHERE " + PublicationColumns.KEY_FULL_ID + " IN (SELECT "
            + AbocodePublicationColumns.KEY_FULL_PUBLICATION_ID + " FROM " + AbocodePublicationColumns.TABLE_NAME
            + " WHERE " + AbocodePublicationColumns.KEY_FULL_ABO_ID + " IN (SELECT " + LoginColumns.KEY_FULL_ID
            + " FROM " + LoginColumns.TABLE_NAME + " WHERE " + LoginColumns.KEY_FULL_LOGIN_VALID + "='1'));";

    int uriType = sURIMatcher.match(uri);

    boolean useCustomQuery = false;

    switch (uriType) {
        case PUBLICATION_ID:
            queryBuilder.appendWhere(PublicationColumns._ID + "=" + uri.getLastPathSegment());
            break;
        case PUBLICATIONS:
            if (projection == null && TextUtils.isEmpty(selection)) {
                useCustomQuery = true;
            }
            break;
        default:
            throw new IllegalArgumentException("Unknown URI");
    }

    Cursor cursor;
    if (useCustomQuery) {
        cursor = dbAdapter.getReadableDatabase().rawQuery(query, null);
    } else {
        queryBuilder.setTables(PublicationColumns.TABLE_NAME);
        queryBuilder.setProjectionMap(sProjectionMap);
        cursor = queryBuilder.query(dbAdapter.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
    }
    cursor.setNotificationUri(getContext().getContentResolver(), uri);
    return cursor;
}
....
我还尝试了QueryBuilder和默认查询,但结果相同。好像我改变了什么,但我不知道是什么。但是,在模拟器中,一切都很好!任何帮助都将不胜感激

编辑// 在安卓4.2.2的旧设备上,它也能工作。唯一一款无法使用的设备是我的三星Galaxy S5


谢谢大家!

数据库中的数据是否在所有设备上都相同?是的,数据来自用户需要帐户的服务器。但我用相同的账户和数据测试了所有这些。