# InMemoryTransformCronetCallback


```
public abstract class InMemoryTransformCronetCallback<T> extends ImplicitFlowControlCallback
```

<br />

|---|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) ||||
| ↳ | [org.chromium.net.UrlRequest.Callback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback) |||
|   | ↳ | [org.chromium.net.apihelpers.ImplicitFlowControlCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback) ||
|   |   | ↳ | [org.chromium.net.apihelpers.InMemoryTransformCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback) |

Known direct subclasses [ByteArrayCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ByteArrayCronetCallback), [JsonCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/JsonCronetCallback), [StringCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/StringCronetCallback)

|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ByteArrayCronetCallback` | A specialization of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback` which returns the body bytes verbatim without any interpretation. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/JsonCronetCallback` | A specialization of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback` that interprets the response body as JSON. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/StringCronetCallback` | A specialization of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback` that interprets the response body as a string. |

*** ** * ** ***

An abstract Cronet callback that reads the entire body to memory and optionally deserializes the body before passing it back to the issuer of the HTTP request.

The requester can subscribe for updates about the request by adding completion mListeners on the callback. When the request reaches a terminal state, the mListeners are informed in order of addition.

| Parameters |
|---|---|
| `<T>` | the response body type |

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback#InMemoryTransformCronetCallback()()` |

| ### Public methods |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback#addCompletionListener(org.chromium.net.apihelpers.CronetRequestCompletionListener<? super T>)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/CronetRequestCompletionListener<T> listener)` Adds a completion listener. |

| ### Protected methods |
|---|---|
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback#onBodyChunkRead(org.chromium.net.UrlResponseInfo,java.nio.ByteBuffer)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/nio/ByteBuffer.html bodyChunk)` Invoked whenever part of the response body has been read. |
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback#onCanceled(org.chromium.net.UrlResponseInfo)(@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked if request was canceled via `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#cancel()`. |
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback#onFailed(org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)(@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException exception)` Invoked if request failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()`. |
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback#onResponseStarted(org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked when the final set of headers, after all redirects, is received. |
| `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback#onSucceeded(org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked when request is completed successfully. |
| `abstract T` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback#transformBodyBytes(org.chromium.net.UrlResponseInfo,byte[])(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, byte[] bodyBytes)` Transforms (deserializes) the plain full body into a user-defined object. |

| ### Inherited methods |
|---|
| From [org.chromium.net.apihelpers.ImplicitFlowControlCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback) |---|---| | `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onCanceled(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked if request was canceled via `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#cancel()`. | | `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException error )` Invoked if request failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()`. | | `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onReadCompleted(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,java.nio.ByteBuffer)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/nio/ByteBuffer.html byteBuffer )` Invoked whenever part of the response body has been read. | | `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onRedirectReceived(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,java.lang.String)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/lang/String.html newLocationUrl )` Invoked whenever a redirect is encountered. | | `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onResponseStarted(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked when the final set of headers, after all redirects, is received. | | `final void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#onSucceeded(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info)` Invoked when request is completed successfully. | | `abstract boolean` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ImplicitFlowControlCallback#shouldFollowRedirect(org.chromium.net.UrlResponseInfo,java.lang.String)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/lang/String.html newLocationUrl)` Invoked whenever a redirect is encountered. | |
| From [org.chromium.net.UrlRequest.Callback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback) |---|---| | `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException error )` Invoked if request failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()`. | | `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onReadCompleted(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,java.nio.ByteBuffer)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/nio/ByteBuffer.html byteBuffer )` Invoked whenever part of the response body has been read. | | `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onRedirectReceived(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,java.lang.String)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info, https://developer.android.com/reference/java/lang/String.html newLocationUrl )` Invoked whenever a redirect is encountered. | |

## Public constructors

### InMemoryTransformCronetCallback

```
public InMemoryTransformCronetCallback()
```

## Public methods

### addCompletionListener

```
public ImplicitFlowControlCallback addCompletionListener(CronetRequestCompletionListener<T> listener)
```

Adds a completion listener. All listeners are informed when the request reaches a terminal state, in order of addition. If a listener is added multiple times, it will only be called once according to the first time it was added.

| See also |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/CronetRequestCompletionListener` |   |

## Protected methods

### onBodyChunkRead

```
protected final void onBodyChunkRead(UrlResponseInfo info, ByteBuffer bodyChunk)
```

Invoked whenever part of the response body has been read. Only part of the buffer may be populated, even if the entire response body has not yet been consumed. The buffer is ready for reading. Buffers are reused internally so the implementing class shouldn't store the buffer or use it anywhere else than in the implementation of this method.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html bodyChunk` | The buffer that contains the received data, flipped for reading. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing a read completion. onFailed will be called with the thrown exception set as the cause of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CallbackException`. |

### onCanceled

```
protected final void onCanceled(@Nullable UrlResponseInfo info)
```

Invoked if request was canceled via `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#cancel()`. Once invoked, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` methods will be invoked.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. May be `null` if no response was received. |

### onFailed

```
protected final void onFailed(@Nullable UrlResponseInfo info, CronetException exception)
```

Invoked if request failed for any reason after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()`. Once invoked, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` methods will be invoked. `error` provides information about the failure.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable.html https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. May be `null` if no response was received. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetException exception` | information about error. |

### onResponseStarted

```
protected final void onResponseStarted(UrlResponseInfo info)
```

Invoked when the final set of headers, after all redirects, is received. Will only be invoked once for each request. It's guaranteed that Cronet doesn't start reading the body until this method returns.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing response start. onFailed will be called with the thrown exception set as the cause of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CallbackException`. |

### onSucceeded

```
protected final void onSucceeded(UrlResponseInfo info)
```

Invoked when request is completed successfully. Once invoked, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` methods will be invoked.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |

### transformBodyBytes

```
protected abstract T transformBodyBytes(UrlResponseInfo info, byte[] bodyBytes)
```

Transforms (deserializes) the plain full body into a user-defined object.

It is assumed that the implementing classes handle edge cases (such as empty and malformed bodies) appropriately. Cronet doesn't inspects the objects and passes them (or any exceptions) along to the issuer of the request.