Merge "Also parse "1" as true for ContentValues#getAsBoolean"

This commit is contained in:
TreeHugger Robot
2017-01-25 20:19:05 +00:00
committed by Android (Google) Code Review
2 changed files with 6 additions and 5 deletions

View File

@@ -414,7 +414,11 @@ public final class ContentValues implements Parcelable {
return (Boolean) value;
} catch (ClassCastException e) {
if (value instanceof CharSequence) {
return Boolean.valueOf(value.toString());
// Note that we also check against 1 here because SQLite's internal representation
// for booleans is an integer with a value of 0 or 1. Without this check, boolean
// values obtained via DatabaseUtils#cursorRowToContentValues will always return
// false.
return Boolean.valueOf(value.toString()) || "1".equals(value);
} else if (value instanceof Number) {
return ((Number) value).intValue() != 0;
} else {

View File

@@ -728,13 +728,10 @@ public class DatabaseUtils {
* @param values the {@link ContentValues} to put the row into.
*/
public static void cursorRowToContentValues(Cursor cursor, ContentValues values) {
AbstractWindowedCursor awc =
(cursor instanceof AbstractWindowedCursor) ? (AbstractWindowedCursor) cursor : null;
String[] columns = cursor.getColumnNames();
int length = columns.length;
for (int i = 0; i < length; i++) {
if (awc != null && awc.isBlob(i)) {
if (cursor.getType(i) == Cursor.FIELD_TYPE_BLOB) {
values.put(columns[i], cursor.getBlob(i));
} else {
values.put(columns[i], cursor.getString(i));