microg/GmsCore · error · RuntimeException

Unsupported cursor on this platform!

Error message

Unsupported cursor on this platform!

What it means

Thrown in DataHolder.getCursorType when the Cursor is not an AbstractWindowedCursor, so CursorWindow-based type introspection (isNull/isLong/isFloat/isString) cannot be used on this platform. It signals an unsupported platform cursor implementation, not bad input data.

Source

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

        if (cursor instanceof AbstractWindowedCursor) {
            CursorWindow cursorWindow = ((AbstractWindowedCursor) cursor).getWindow();
            int pos = cursor.getPosition();
            int type = -1;
            if (cursorWindow.isNull(pos, i)) {
                type = FIELD_TYPE_NULL;
            } else if (cursorWindow.isLong(pos, i)) {
                type = FIELD_TYPE_INTEGER;
            } else if (cursorWindow.isFloat(pos, i)) {
                type = FIELD_TYPE_FLOAT;
            } else if (cursorWindow.isString(pos, i)) {
                type = FIELD_TYPE_STRING;
            } else if (cursorWindow.isBlob(pos, i)) {
                type = FIELD_TYPE_BLOB;
            }

            return type;
        }
        throw new RuntimeException("Unsupported cursor on this platform!");
    }

    /**
     * Closes the data holder, releasing all of its resources and making it completely invalid.
     */
    @Override
    public void close() {
        synchronized (this) {
            if (!closed) {
                closed = true;
                for (CursorWindow window : windows) {
                    window.close();
                }
            }
        }
    }

    /**

View on GitHub (pinned to 157c9d86ac)

Solutions

  1. Verify the Cursor passed to DataHolder comes from a SQLiteDatabase query (which returns AbstractWindowedCursor) rather than a custom wrapper
  2. Wrap or replace the cursor with a CursorWindow-compatible implementation before creating the DataHolder
  3. Extend AbstractWindowedCursor in the custom Cursor implementation
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at play-services-base/src/main/java/com/google/android/gms/common/data/DataHolder.java:182 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/49b9c84e371d9e33. Report an issue: GitHub.