code: @NonNull
      public static <T> Data<T> fromCursor(@NonNull Callable<Cursor> loader,
                                           @NonNull RowMapper<T> rowMapper) {
          return fromCursor(loader, rowMapper, DataExecutors.defaultExecutor());
      }
docs: Creates a {@linkplain Data} that presents elements of a {@link Cursor} retrieved by invoking the specified loader
  function in a worker thread. {@link T} instances are mapped using the specified row mapper function.
  The cursor's position will be pre-configured - callers don't need to set it.
  <p>
  The {@linkplain Data} will respond to backend changes by invoking the loader function again, if the cursor
  dispatches notifications to the registered {@link DataSetObserver}s.
  <p>
  Note that the returned {@linkplain Data} manages the {@linkplain Cursor} instances itself, and callers should
  never close cursors returned by the loader function.
  @param loader The function to be invoked to load the cursor.
  @param rowMapper The function to be invoked to map rows from the {@linkplain Cursor} to instances of {@link T}.
  @param <T> The type of element presented by the returned data.
  @return A {@linkplain Data} instance that will present the cursor elements.
  @see Cursor#registerDataSetObserver(DataSetObserver)
  @see DataSetObserver