I have 2 tables in my sqlite database so now I'm trying to create content provider for the database. all of the examples i've seen so far only shows the CRUD code for 2 tables but not checkColumns. I tried doing this
private void checkColumns(String[] projection) {
if (Constants.COLUMNS != null) {
HashSet<String> requestedColumns = new HashSet<String>(Arrays.asList(projection));
HashSet<String> availableColumns = new HashSet<String>(Arrays.asList(Constants.COLUMNS));
if (!availableColumns.containsAll(requestedColumns)) {
throw new IllegalArgumentException("Unknown columns in projection");
}
}
if (Constants.pCOLUMNS != null) {
HashSet<String> requestedColumns = new HashSet<String>(Arrays.asList(projection));
HashSet<String> availableColumns = new HashSet<String>(Arrays.asList(Constants.pCOLUMNS));
if (!availableColumns.containsAll(requestedColumns)) {
throw new IllegalArgumentException("Unknown columns in projection");
}
}
}
then for the query, I tried this
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
checkColumns(Constants.COLUMNS);
checkColumns(Constants.pCOLUMNS);
queryBuilder.setTables(Constants.ITEM_TABLE);
queryBuilder.setTables(Constants.PANTRY_TABLE);
int type = URI_MATCHER.match(uri);
switch (type) {
case ITEMS:
break;
case ITEM:
queryBuilder.appendWhere(Constants.COLUMN_iID + " = " + uri.getLastPathSegment());
break;
case sPANTRY:
break;
case PANTRY:
queryBuilder.appendWhere(Constants.COLUMN_pID + " = " + uri.getLastPathSegment());
break;
default:
throw new IllegalArgumentException("Unknown URI: " + uri);
}
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
}
from Constants.java
public static final String[] COLUMNS = {
Constants.COLUMN_iID,
Constants.COLUMN_ITEM,
Constants.COLUMN_iQUANTITY,
Constants.COLUMN_iUNIT,
Constants.COLUMN_PRICE,
Constants.COLUMN_STORE
};
public static final String[] pCOLUMNS = {
Constants.COLUMN_pID,
Constants.COLUMN_PANTRY,
Constants.COLUMN_pQUANTITY,
Constants.COLUMN_pUNIT,
Constants.COLUMN_EXPIRY_DATE
};
}
but I get this error
Caused by: java.lang.IllegalArgumentException: Unknown columns in projection
I tried using switch case instead in checkColumns like this
private void checkColumns(String[] projection) {
switch(projection) {
case Constants.COLUMNS:
HashSet<String> requestedColumns = new HashSet<String>(Arrays.asList(projection));
HashSet<String> availableColumns = new HashSet<String>(Arrays.asList(Constants.COLUMNS));
if (!availableColumns.containsAll(requestedColumns)) {
throw new IllegalArgumentException("Unknown columns in projection");
}
break;
case Constants.pCOLUMNS:
HashSet<String> requestedColumns = new HashSet<String>(Arrays.asList(projection));
HashSet<String> availableColumns = new HashSet<String>(Arrays.asList(Constants.pCOLUMNS));
if (!availableColumns.containsAll(requestedColumns)) {
throw new IllegalArgumentException("Unknown columns in projection");
}
break;
}
}
but I get 'constant expression required' on both Constants.
Aucun commentaire:
Enregistrer un commentaire