Question

I've done a lot of research, but not much of it makes sense since I'm not familiar with placing in-app ads (this is my first time making an app, and my first time working with ads).

Here's my updated MainActivity.java code:

package com.me.mygdxgame;

import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;

public class MainActivity extends AndroidApplication {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); //Changed it back to main, got rid of an error

        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
        cfg.useGL20 = true;

        initialize(new MyGame(), cfg);

        AdView adView;
        adView = new AdView(this);
        adView.setAdSize(AdSize.BANNER);
        adView.setAdUnitId("My Ad Unit ID (just using this string for posting purposes");

        LinearLayout layout = (LinearLayout) findViewById(R.id.normal); //Changed R.id.linearlayout to R.id.normal. After looking at my R.java class, I saw that there was no id.linearlayout, so I changed it to R.id.normal, which did exist.
        layout.addView(adView); //This is line 44, where the NullPointer is caused

        AdRequest adRequest = new AdRequest.Builder().build();

        adView.loadAd(adRequest);
    }
}

Here's the updated AndroidManifest XML code:

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.me.mygdxgame"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="5" android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/testing"
        android:label="@string/app_name" >

        <meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />

        <activity
            android:name=".MainActivity"
            android:label="Flappy Nerd"
            android:screenOrientation="portrait"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

         <activity android:name="com.google.android.gms.ads.AdActivity"
             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

    </application>

</manifest>

Here's the main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/normal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

</LinearLayout>

Here's the logcat:

03-16 16:46:50.126: E/AndroidRuntime(10338): FATAL EXCEPTION: main
03-16 16:46:50.126: E/AndroidRuntime(10338): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.me.mygdxgame/com.me.mygdxgame.MainActivity}: java.lang.NullPointerException
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2359)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.app.ActivityThread.access$700(ActivityThread.java:165)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.os.Looper.loop(Looper.java:137)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.app.ActivityThread.main(ActivityThread.java:5455)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at java.lang.reflect.Method.invokeNative(Native Method)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at java.lang.reflect.Method.invoke(Method.java:525)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at dalvik.system.NativeStart.main(Native Method)
03-16 16:46:50.126: E/AndroidRuntime(10338): Caused by: java.lang.NullPointerException
03-16 16:46:50.126: E/AndroidRuntime(10338):    at com.me.mygdxgame.MainActivity.onCreate(MainActivity.java:44)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.app.Activity.performCreate(Activity.java:5372)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
03-16 16:46:50.126: E/AndroidRuntime(10338):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)

Here is an updated LogCat: When I take out the line of code that seemed to be causing NullPointers "layout.addView(adView);", the app runs fine, but I get these messages from LogCat:

03-16 17:04:06.723: E/GooglePlayServicesUtil(11199): The Google Play services resources were not found. Check your project configuration to ensure that the resources are included.

03-16 17:04:09.265: I/Ads(11199): Ad finished loading.

03-16 17:05:09.269: I/Ads(11199): Ad is not visible. Not refreshing ad.
Was it helpful?

Solution

You seem to have missed the activity part for ads in your Manifest file:

<activity
   android:name="com.google.android.gms.ads.AdActivity"
   android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

You'll have to adapt all your routes to this. If you can compile but it doesn't work, you're probably using a deprecated version of AdMob. You'll have to import the google-play_lib external library into your project, here's a link on how to do it.

OTHER TIPS

Your code is such a mess!

There are several errors in it you should fix. To avoid errors your setContentView(R.layout.main); must be the first line right after the super.onCreate(savedInstanceState);

And the most confusing one, to me, is:

Why do you have declared a RelativeLayout inside the App's Manifest?? It must be declared inside main.xml. This is the cause of your NullPointerException. It happens because R.id.mainLayout can't find nothing with this ID inside your layout, thus making layout variable null and when called causes a crash (cus it is wrongly declared in your manifest).

As @yugidroid, your code is pretty messy! :P But you will get it eventually, don't worry!

Most important thing, don't put layouts on your manifest, they don't go there! In your folder /layout (inside your project) create a new xml file called "activity_main.xml" and fill it with this:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"></LinearLayout>
</RelativeLayout>

On your java file, change to

adView.setAdUnitId("xx-xxx-xxx-1234567890123456/1234567890"); //Change the numbers to what google sent you in the email!!!

and Adrequest change to

AdRequest adRequest = new AdRequest.Builder().build();

(not recommended for testing but for now it will do)

I recommend you though to read the documentation again though, it is pretty straight forward https://developers.google.com/mobile-ads-sdk/docs/#play https://developers.google.com/mobile-ads-sdk/docs/admob/fundamentals#play

I bet you are getting the NullPointerException on

findViewById(R.id.normal)

It is almost certainly to do with the #initialize method calling #setContentView and replacing R.layout.main with something else.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top