# UrlRequest.Callback


```
public abstract class UrlRequest.Callback
```

<br />

Known direct subclasses [ImplicitFlowControlCallback](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/ImplicitFlowControlCallback` | An implementation of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` that takes away the difficulty of managing the request lifecycle away, and automatically proceeds to read the response entirely. |

Known indirect subclasses [ByteArrayCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/ByteArrayCronetCallback), [InMemoryTransformCronetCallback](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/apihelpers/InMemoryTransformCronetCallback), [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/InMemoryTransformCronetCallback` | 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. |
| `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. |

*** ** * ** ***

Users of Cronet extend this class to receive callbacks indicating the progress of a `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest` being processed. An instance of this class is passed in to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder`'s constructor when constructing the `UrlRequest`.

Note: All methods will be invoked on the thread of the `https://developer.android.com/reference/java/util/concurrent/Executor.html` used during construction of the `UrlRequest`.

## Summary

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

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#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()`. |
| `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. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#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. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#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. |

## Public constructors

### Callback

```
public Callback()
```

## Public methods

### onCanceled

```
public void onCanceled(UrlRequest request, 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. Default implementation takes no action.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request that was canceled. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. May be `null` if no response was received. |

### onFailed

```
public abstract void onFailed(
    UrlRequest request,
    UrlResponseInfo info,
    CronetException error
)
```

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/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request that failed. |
| `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 error` | information about error. |

### onReadCompleted

```
public abstract void onReadCompleted(
    UrlRequest request,
    UrlResponseInfo info,
    ByteBuffer byteBuffer
)
```

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. With the exception of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onCanceled(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)`, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` method will be invoked for the request, including `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onSucceeded(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)` and `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)`, until `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#read(java.nio.ByteBuffer)` is called to attempt to continue reading the response body.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request that received data. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html byteBuffer` | The buffer that was passed in to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#read(java.nio.ByteBuffer)`, now containing the received data. The buffer's position is updated to the end of the received data. The buffer's limit is not changed. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing a read completion. `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)` 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`. |

### onRedirectReceived

```
public abstract void onRedirectReceived(
    UrlRequest request,
    UrlResponseInfo info,
    String newLocationUrl
)
```

Invoked whenever a redirect is encountered. This will only be invoked between the call to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()` and `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onResponseStarted(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)`. The body of the redirect response, if it has one, will be ignored. The redirect will not be followed until the URLRequest's `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#followRedirect()` method is called, either synchronously or asynchronously.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request being redirected. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |
| `https://developer.android.com/reference/java/lang/String.html newLocationUrl` | Location where request is redirected. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` | if an error occurs while processing a redirect. `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)` 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`. |

### onResponseStarted

```
public abstract void onResponseStarted(UrlRequest request, UrlResponseInfo info)
```

Invoked when the final set of headers, after all redirects, is received. Will only be invoked once for each request. With the exception of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onCanceled(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)`, no other `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback` method will be invoked for the request, including `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onSucceeded(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)` and `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)`, until `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#read(java.nio.ByteBuffer)` is called to attempt to start reading the response body.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest request` | Request that started to get response. |
| `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. `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)` 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

```
public abstract void onSucceeded(UrlRequest request, 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/UrlRequest request` | Request that succeeded. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlResponseInfo info` | Response information. |