Problemas con la carga de anuncios de AdMob en la aplicación
Estoy intentando tener una exhibición de la bandera del anuncio en mi app y parezco estar teniendo un problema. Cada vez que entro en la actividad, la aplicación se bloquea y menciona algo sobre eso cuando intento cargar el anuncio, que es una referencia nula. No estoy seguro de por qué.
Aquí está el xml para el anuncio:
- Crear bordes en una vista de androide en xml dibujable, en 3 lados?
- ¿Cómo puedo aplicar operaciones matemáticas a las dimensiones de Android?
- ¿Cómo infulo una vista personalizada en XML?
- ¿Cómo puedo hacer que el texto de TextView sea de dos tamaños diferentes?
- Android Databinding: "Referencias de métodos con '.' es obsoleto"
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/gameLayout"> <com.google.android.gms.ads.AdView android:id="@+id/bannerAd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" ads:adSize="BANNER" ads:adUnitId="MY_ADUNITID" /> </FrameLayout>
Aquí está el código java para usar los anuncios:
//load ads AdView adView = (AdView)findViewById(R.id.bannerAd); AdRequest.Builder request = new AdRequest.Builder(); request.addTestDevice(AdRequest.DEVICE_ID_EMULATOR); adView.loadAd(request.build());
Aquí está el logcat:
09-21 21:55:39.300: E/AndroidRuntime(1168): FATAL EXCEPTION: main 09-21 21:55:39.300: E/AndroidRuntime(1168): Process: com.project.llb, PID: 1168 09-21 21:55:39.300: E/AndroidRuntime(1168): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.twentytwentythree.sab/com.twentytwentythree.sab.runGraphics}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.ads.AdView.loadAd(com.google.android.gms.ads.AdRequest)' on a null object reference 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653) 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.app.ActivityThread.access$800(ActivityThread.java:156) 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355) 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.os.Handler.dispatchMessage(Handler.java:102) 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.os.Looper.loop(Looper.java:157) 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.app.ActivityThread.main(ActivityThread.java:5872) 09-21 21:55:39.300: E/AndroidRuntime(1168): at java.lang.reflect.Method.invoke(Native Method) 09-21 21:55:39.300: E/AndroidRuntime(1168): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:852) 09-21 21:55:39.300: E/AndroidRuntime(1168): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:668) 09-21 21:55:39.300: E/AndroidRuntime(1168): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.ads.AdView.loadAd(com.google.android.gms.ads.AdRequest)' on a null object reference 09-21 21:55:39.300: E/AndroidRuntime(1168): at com.twentytwentythree.sab.runGraphics.onCreate(runGraphics.java:94) 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.app.Activity.performCreate(Activity.java:5312) 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111) 09-21 21:55:39.300: E/AndroidRuntime(1168): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2552) 09-21 21:55:39.300: E/AndroidRuntime(1168): ... 9 more
Aquí está el código del androidmanifest:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation" > </activity>
Ahora estoy usando el método addTestDevice porque supongo que es lo que necesito usar ya que mi aplicación no está en el mercado todavía. Tengo mi configuración de la cuenta del admob y tengo la configuración de la bandera esa manera.
Por favor, déjame saber si tienes algunas ideas. Muchas gracias.
- ¿Cuál es el espacio de nombres XML para Android de la aplicación?
- Parsing XML Android - Análisis de la descripción <description>
- Cómo hacer TextView del mismo tamaño sin importar los textos dentro
- "Error: Duplicar recursos" mientras se construye Android Studio Project?
- Cómo hacer navegación personalizada ver animaciones como ésta
- El enfoque de EditText es inconsistente en todos los diseños
- Agregar varias vistas personalizadas al diseño mediante programación
- Variables en los recursos XML: pasa valores de padres a hijos
R.id.bannerAd no está disponible en el contenido que ha establecido para su Actividad / Fragmento. Antes de llamar a:
AdView adView = (AdView)findViewById(R.id.bannerAd);
Debiste haber llamado
setContentView(R.layout.MyLayoutContainingBannerAd);
Compruebe que ha incluido: compile 'com.google.android.gms: play-services-ads: 8.4.0' en el gradle.
Me enfrenté a un problema similar. Cuando revisé de cerca en el archivo de recurso Había dos archivo de recurso para mi actividad:
\ Res \ layout \ activity_main_lauch.xml
\ Res \ layout-v21 \ activity_main_lauch.xml
Yo estaba modificando archivo único, por lo tanto fue lanzar error. Cuando aplico el cambio en ambos archivos que comenzó a trabajar.
La solución aceptada no solucionó esto para mí, ya que el setContentView()
mi actividad es antes del código del anuncio.
El anuncio en cuestión, sin embargo, estaba en un diseño de fragmento , que se estaba insertando en el diseño de la actividad. Parece que alguna clase de condición de carrera estaba sucediendo, en que el más tarde en el código que colocó el código de anuncios más posibilidades que tenía para el éxito, a pesar de que el código tenía poco que ver con la pantalla.
Decidí que el lugar más satisfactorio para poner el código estaba en el fragmento onViewCreated()
, donde aún no me ha fallado.