<br />

In cases where an ad fails to load, a
callback
is called which provides a
`LoadAdError` object.

For `AdManagerAdView`, the following is called:

### Kotlin

```kotlin
fun onAdFailedToLoad(error: LoadAdError)
```

### Java

```java
public void onAdFailedToLoad(LoadAdError adError);
```

The following example shows the information available when an ad fails to load:

### Kotlin

```kotlin
override fun onAdFailedToLoad(error: LoadAdError) {
  // Gets the domain from which the error came.
  val errorDomain = error.domain
  // Gets the error code. See
  // https://developers.google.com/admob/android/reference/com/google/android/gms/ads/AdRequest#constant-summary
  // for a list of possible codes.
  val errorCode = error.code
  // Gets an error message.
  // For example "Account not approved yet". See
  // https://support.google.com/admob/answer/9905175 for explanations of
  // common errors.
  val errorMessage = error.message
  // Gets additional response information about the request. See
  // https://developers.google.com/admob/android/response-info
  // information.
  val responseInfo = error.responseInfo
  // Gets the cause of the error, if available.
  val cause = error.cause
  // All of this information is available using the error's toString() method.
  Log.d("Ads", error.toString())
}
```

### Java

```java
@Override
public void onAdFailedToLoad(@NonNull LoadAdError adError) {
  // Gets the domain from which the error came.
  String errorDomain = adError.getDomain();
  // Gets the error code. See
  // https://developers.google.com/admob/android/reference/com/google/android/gms/ads/AdRequest#constant-summary
  // for a list of possible codes.
  int errorCode = adError.getCode();
  // Gets an error message.
  // For example "Account not approved yet". See
  // https://support.google.com/admob/answer/9905175 for explanations of
  // common errors.
  String errorMessage = adError.getMessage();
  // Gets additional response information about the request. See
  // https://developers.google.com/admob/android/response-info
  // information.
  ResponseInfo responseInfo = adError.getResponseInfo();
  // Gets the cause of the error, if available.
  AdError cause = adError.getCause();
  // All of this information is available using the error's toString() method.
  Log.d("Ads", adError.toString());
}
```

## Debug common error logging messages

In version 23.5.0 of Google Mobile Ads SDK (Legacy), verbose logging was enhanced to
include a stack trace of where the ad fails to load. These message don't
indicate a crash, but rather identify the unique source of the error.
The following table provides common error logs, descriptions, and suggested
actions for resolution:

| Error log | Description | Suggested action(s) |
|---|---|---|
| `com.google.android.gms.ads.nonagon.render.cp: *` | The ad server did not return an ad or any mediation ad sources to request. | For details to troubleshoot no fills, see [Troubleshoot unfilled impressions](https://support.google.com/admanager/answer/1739296). |
| `com.google.android.gms.ads.nonagon.render.e: *` | All ad sources in the mediation waterfall failed to load. The specific error represents the last ad source that failed. | For details about logging each mediation ad source's failure reason, see [Response Info](https://developers.google.com/ad-manager/mobile-ads-sdk/android/response-info.md.txt#response_info). |
| `com.google.android.gms.ads.internal.util.*: Unable to obtain a JavascriptEngine.` | The ad request was unsuccessful because `WebView` is not allowed in privileged processes. | - Check your internet settings. - Remove `android:sharedUserId="android.uid.system"` and install app as system app. |
| `com.google.android.gms.ads.internal.util.*: Unable to obtain a JavascriptEngine.` | The ad request was unsuccessful because of a slow network connection. | Try improving your internet connection and try again. |
| `com.google.android.gms.ads.nonagon.load.a` | The ad request timed out. | Try improving your internet connection and try again. |
| `com.google.android.gms.ads.internal.util.*: Error while connecting to ad server: Unable to resolve host "pubads.g.doubleclick.net": No address associated with hostname` | The ad request was unsuccessful due to network connectivity. | Try improving your internet connection and try again. |
| `com.google.android.gms.ads.internal.util.*: Error building request URL: Cannot determine request type. Is your ad unit id correct?` | The ad unit ID did not match an expected regular expression. | Check if your ad unit ID is correct. |
| `com.google.android.gms.ads.internal.render.bt: Unable to instantiate mediation adapter class.` | Google Mobile Ads SDK (Legacy) can't find the mediation adapter. | - Diagnose which adapters Google Mobile Ads SDK (Legacy) can't find using [View available adapters](https://developers.google.com/ad-manager/mobile-ads-sdk/android/ad-inspector.md.txt#view_available_adapters) in ad inspector. - Add missing adapters to your project. To read instructions for how to complete this step for each ad source, see [Network details](https://developers.google.com/ad-manager/mobile-ads-sdk/android/choose-networks.md.txt#network_details). |
| `com.google.android.gms.internal.ads.*: Received error HTTP response code: 403` | Ad Manager servers rejected the request. | Try again later. If consistently reproducible, capture the request URL using [ad inspector](https://developers.google.com/ad-manager/mobile-ads-sdk/android/ad-inspector.md.txt) and contact support. |

> [!TIP]
> **Tip:** To resolve errors originating from a mediation ad source, contact their support team for assistance.