{"record":{"id":"bdcdedd0df50bf41","repo":"bumptech/glide","slug":"failed-to-find-result-encoder-for-resource-class","errorCode":null,"errorMessage":"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.","messagePattern":"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\\.","errorType":"exception","errorClass":"NoResultEncoderAvailableException","httpStatus":null,"severity":"error","filePath":"library/src/main/java/com/bumptech/glide/Registry.java","lineNumber":575,"sourceCode":"      modelToResourceClassCache.put(\n          modelClass, resourceClass, transcodeClass, Collections.unmodifiableList(result));\n    }\n\n    return result;\n  }\n\n  public boolean isResourceEncoderAvailable(@NonNull Resource<?> resource) {\n    return resourceEncoderRegistry.get(resource.getResourceClass()) != null;\n  }\n\n  @NonNull\n  public <X> ResourceEncoder<X> getResultEncoder(@NonNull Resource<X> resource)\n      throws NoResultEncoderAvailableException {\n    ResourceEncoder<X> resourceEncoder = resourceEncoderRegistry.get(resource.getResourceClass());\n    if (resourceEncoder != null) {\n      return resourceEncoder;\n    }\n    throw new NoResultEncoderAvailableException(resource.getResourceClass());\n  }\n\n  @NonNull\n  @SuppressWarnings(\"unchecked\")\n  public <X> Encoder<X> getSourceEncoder(@NonNull X data) throws NoSourceEncoderAvailableException {\n    Encoder<X> encoder = encoderRegistry.getEncoder((Class<X>) data.getClass());\n    if (encoder != null) {\n      return encoder;\n    }\n    throw new NoSourceEncoderAvailableException(data.getClass());\n  }\n\n  @NonNull\n  public <X> DataRewinder<X> getRewinder(@NonNull X data) {\n    return dataRewinderRegistry.build(data);\n  }\n\n  @NonNull","sourceCodeStart":557,"sourceCodeEnd":593,"githubUrl":"https://github.com/bumptech/glide/blob/eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a/library/src/main/java/com/bumptech/glide/Registry.java#L557-L593","documentation":"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.","triggerScenarios":"getResultEncoder(resource) looks up resourceEncoderRegistry.get(resource.getResourceClass()); if null, NoResultEncoderAvailableException is thrown with the resource class name.","commonSituations":"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.","solutions":["Register a ResourceEncoder for your resource class in Registry via registry.append(...).","If caching the transformed resource is unnecessary, use DiskCacheStrategy.DATA or DiskCacheStrategy.NONE to avoid requiring a result encoder."],"exampleFix":"// before\n// decoding a CustomResource but no encoder -> NoResultEncoderAvailableException\nGlide.with(view).load(model).diskCacheStrategy(DiskCacheStrategy.RESOURCE).into(view)\n\n// after (option A) register an encoder\nregistry.append(CustomResource::class.java, CustomResourceEncoder())\n// after (option B) avoid caching the resource\nGlide.with(view).load(model).diskCacheStrategy(DiskCacheStrategy.DATA).into(view)","handlingStrategy":"try-catch","validationCode":"// Check encoder availability before caching the resource.\nval resource: Resource<*> = /* ... */\nif (glide.registry.isResourceEncoderAvailable(resource)) {\n  // safe to use DiskCacheStrategy.RESOURCE / ALL\n} else {\n  // use DiskCacheStrategy.DATA or NONE, or register an encoder\n}","typeGuard":null,"tryCatchPattern":"try {\n  glide.registry.getResultEncoder(resource)\n} catch (e: NoResultEncoderAvailableException) {\n  // register a ResourceEncoder<CustomResource> or switch diskCacheStrategy\n}","preventionTips":["Register a ResourceEncoder for every custom resource type you cache.","Use isResourceEncoderAvailable() to gate DiskCacheStrategy.RESOURCE/ALL.","Pair custom decoders with matching encoders in Registry."],"tags":["glide-core","registry","encoder","disk-cache","custom-resource","runtime"],"backgroundTag":null,"analyzedSha":"eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a","analyzedAt":"2026-08-14T01:43:54.821Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}