microg/GmsCore · error · IllegalArgumentException

Unsupported object for column

Error message

Unsupported object for column 

What it means

Validation guard in DataHolder.createCursorWindows: a value in a row map is not one of the supported types (null, String, Long, Integer, Boolean, Double, byte[], etc.). The offending value is appended to the message; the faulty input is the unsupported column value supplied to the builder.

Source

Thrown at play-services-base/src/main/java/com/google/android/gms/common/data/DataHolder.java:252

                    if (val == null) {
                        current.putNull(rowIndex, columnIndex);
                    } else if (val instanceof String) {
                        current.putString((String) val, rowIndex, columnIndex);
                    } else if (val instanceof Long) {
                        current.putLong((Long) val, rowIndex, columnIndex);
                    } else if (val instanceof Integer) {
                        current.putLong((Integer) val, rowIndex, columnIndex);
                    } else if (val instanceof Boolean) {
                        if ((Boolean) val)
                            current.putLong(1, rowIndex, columnIndex);
                    } else if (val instanceof byte[]) {
                        current.putBlob((byte[]) val, rowIndex, columnIndex);
                    } else if (val instanceof Double) {
                        current.putDouble((Double) val, rowIndex, columnIndex);
                    } else if (val instanceof Float) {
                        current.putDouble((Float) val, rowIndex, columnIndex);
                    } else {
                        throw new IllegalArgumentException("Unsupported object for column " + columnIndex + ": " + val);
                    }
                }
            }
        } catch (RuntimeException e) {
            for (CursorWindow window : windows) {
                window.close();
            }
            throw e;
        }
        return windows.toArray(new CursorWindow[windows.size()]);
    }

    private static CursorWindow[] createCursorWindows(Cursor cursor) {
        if (cursor.getColumnCount() == 0) return new CursorWindow[0];
        List<CursorWindow> windows = new ArrayList<CursorWindow>();
        CursorWindow current = null;
        int rowIndex = 0;
        while (cursor.moveToNext()) {

View on GitHub (pinned to 157c9d86ac)

Solutions

  1. Convert the unsupported object to a supported type (String, Long, Integer, Boolean, Double, byte[]) before adding it to the row
  2. Add an instanceof check on dynamic values and normalize them before building the DataHolder
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at play-services-base/src/main/java/com/google/android/gms/common/data/DataHolder.java:252 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of microg/GmsCore@157c9d86ac (2026-09-06). Data as JSON: /api/errors/6eedc3c758eb6180. Report an issue: GitHub.