bumptech/glide · error · NoResultEncoderAvailableException

Failed to find result encoder for resource class: {}, you ma

Error message

Failed to find result encoder for resource class: {}, you may need to consider registering a new Encoder for the requested type or DiskCacheStrategy.DATA/DiskCacheStrategy.NONE if caching your transformed resource is unnecessary.

What it means

Thrown (as NoResultEncoderAvailableException) by Registry.getResultEncoder() when no ResourceEncoder is registered for the given resource's class. Glide needs a result encoder to write a transformed/decoded resource to the disk cache; without one it cannot cache the resource type.

Source

Thrown at library/src/main/java/com/bumptech/glide/Registry.java:575

      modelToResourceClassCache.put(
          modelClass, resourceClass, transcodeClass, Collections.unmodifiableList(result));
    }

    return result;
  }

  public boolean isResourceEncoderAvailable(@NonNull Resource<?> resource) {
    return resourceEncoderRegistry.get(resource.getResourceClass()) != null;
  }

  @NonNull
  public <X> ResourceEncoder<X> getResultEncoder(@NonNull Resource<X> resource)
      throws NoResultEncoderAvailableException {
    ResourceEncoder<X> resourceEncoder = resourceEncoderRegistry.get(resource.getResourceClass());
    if (resourceEncoder != null) {
      return resourceEncoder;
    }
    throw new NoResultEncoderAvailableException(resource.getResourceClass());
  }

  @NonNull
  @SuppressWarnings("unchecked")
  public <X> Encoder<X> getSourceEncoder(@NonNull X data) throws NoSourceEncoderAvailableException {
    Encoder<X> encoder = encoderRegistry.getEncoder((Class<X>) data.getClass());
    if (encoder != null) {
      return encoder;
    }
    throw new NoSourceEncoderAvailableException(data.getClass());
  }

  @NonNull
  public <X> DataRewinder<X> getRewinder(@NonNull X data) {
    return dataRewinderRegistry.build(data);
  }

  @NonNull

View on GitHub (pinned to eb14a895d8)

Solutions

  1. Register a ResourceEncoder for your resource class in Registry via registry.append(...).
  2. If caching the transformed resource is unnecessary, use DiskCacheStrategy.DATA or DiskCacheStrategy.NONE to avoid requiring a result encoder.

Example fix

// before
// decoding a CustomResource but no encoder -> NoResultEncoderAvailableException
Glide.with(view).load(model).diskCacheStrategy(DiskCacheStrategy.RESOURCE).into(view)

// after (option A) register an encoder
registry.append(CustomResource::class.java, CustomResourceEncoder())
// after (option B) avoid caching the resource
Glide.with(view).load(model).diskCacheStrategy(DiskCacheStrategy.DATA).into(view)
Defensive patterns

Strategy: try-catch

Validate before calling

// Check encoder availability before caching the resource.
val resource: Resource<*> = /* ... */
if (glide.registry.isResourceEncoderAvailable(resource)) {
  // safe to use DiskCacheStrategy.RESOURCE / ALL
} else {
  // use DiskCacheStrategy.DATA or NONE, or register an encoder
}

Try / catch

try {
  glide.registry.getResultEncoder(resource)
} catch (e: NoResultEncoderAvailableException) {
  // register a ResourceEncoder<CustomResource> or switch diskCacheStrategy
}

Prevention

When it happens

Trigger: getResultEncoder(resource) looks up resourceEncoderRegistry.get(resource.getResourceClass()); if null, NoResultEncoderAvailableException is thrown with the resource class name.

Common situations: Loading/caching a custom resource type for which you registered a ResourceDecoder but no ResourceEncoder; using DiskCacheStrategy.RESOURCE (or ALL) for a type Glide cannot write back; a custom ModelLoader producing a non-standard decoded type.

Related errors


AI-assisted analysis of bumptech/glide@eb14a895d8 (2026-08-14). Data as JSON: /api/errors/bdcdedd0df50bf41. Report an issue: GitHub.