gpt4 book ai didi

java - 我做错了什么,如何添加插页式广告

转载 作者:太空宇宙 更新时间:2023-11-04 14:35:34 25 4
gpt4 key购买 nike

这几天我一直在尝试弄清楚如何向我的项目添加广告。我希望你们能告诉我该怎么做。我试图在第一轮之后(玩家第一次死亡)在他们关闭广告后转换广告;这将使他们能够再次玩游戏。

没有广告出现,并且我收到如下错误:

09-02 17:14:53.825: W/dalvikvm(635): threadid=11: thread exiting with uncaught exception     (group=0x40a13300)
09-02 17:14:53.835: E/AndroidRuntime(635): FATAL EXCEPTION: GLThread 75
09-02 17:14:53.835: E/AndroidRuntime(635): java.lang.NullPointerException
09-02 17:14:53.835: E/AndroidRuntime(635): at com.JrodManU.LaserJumper.android.Ad.loadAd(Ad.java:45)
09-02 17:14:53.835: E/AndroidRuntime(635): at com.JrodManU.LaserJumper.android.AndroidLauncher.loadAd(AndroidLauncher.java:26)
09-02 17:14:53.835: E/AndroidRuntime(635): at com.JrodManU.LaserJumper.LaserJumper.loadAd(LaserJumper.java:36)
09-02 17:14:53.835: E/AndroidRuntime(635): at com.JrodManU.LaserJumper.screens.InGameScreen. <init>(InGameScreen.java:51)
09-02 17:14:53.835: E/AndroidRuntime(635): at com.JrodManU.LaserJumper.LaserJumper.create(LaserJumper.java:15)
09-02 17:14:53.835: E/AndroidRuntime(635): at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:236)
09-02 17:14:53.835: E/AndroidRuntime(635): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1505)
09-02 17:14:53.835: E/AndroidRuntime(635): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)

我的类(class):

Android启动器

package com.JrodManU.LaserJumper.android;

import android.os.Bundle;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.JrodManU.LaserJumper.GameEventListener;
import com.JrodManU.LaserJumper.LaserJumper;

public class AndroidLauncher extends AndroidApplication implements GameEventListener {
Ad ad = new Ad();
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
initialize(new LaserJumper(this), config);
}

@Override
public void showAd() {
ad.showAd();
}

@Override
public void loadAd() {
ad.loadAd();
}

@Override
public boolean isShowing() {
return ad.isShowing();
}

@Override
public boolean isLoaded() {
return ad.isLoaded();
}
}

InGameScreen(屏幕类)

package com.JrodManU.LaserJumper.screens;

import com.JrodManU.LaserJumper.LaserJumper;

public class InGameScreen implements Screen {
LaserJumper game;
boolean firstTime;

public InGameScreen(LaserJumper game) {
this.game = game;
game.loadAd();
firstTime = true;
}

@Override
public void render(float delta) {
generalUpdate();
}

private void generalUpdate() {
if(playerDied) {
if(firstTime && game.isLoaded()) {
System.out.println("hi");
game.showAd();
firstTime = false;
while(game.isShowing()) {
//Waiting for the ad to go away..
}
}
}

广告

package com.JrodManU.LaserJumper.android;

import com.JrodManU.LaserJumper.GameEventListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.AdListener;

import android.app.Activity;
import android.os.Bundle;

public class Ad extends Activity implements GameEventListener{
private InterstitialAd mInterstitialAd;
public static boolean showing;
public static boolean loaded;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("*****");
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
showing = false;
}

@Override
public void onAdLoaded() {
loaded = true;
}
});
}

public void showAd() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
showing = true;
}
}

public void loadAd() {
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
mInterstitialAd.loadAd(adRequestBuilder.build());
}

public boolean isShowing() {
if(showing) {
return true;
} else {
return false;
}
}

public boolean isLoaded() {
if(loaded) {
return true;
} else {
return false;
}
}
}

LaserJumper(主类)

package com.JrodManU.LaserJumper;

import com.JrodManU.LaserJumper.screens.*;
import com.badlogic.gdx.Game;

public class LaserJumper extends Game{
InGameScreen inGameScreen;
public Preferences preferences;
public GameEventListener gameEventListener;
@Override
public void create() {
inGameScreen = new InGameScreen(this);
setScreen(inGameScreen);
}

public void changeToInGame() {
inGameScreen = new InGameScreen(this);
setScreen(inGameScreen);
}

public LaserJumper(GameEventListener listener) {
gameEventListener = listener;
}

public void showAd() {
gameEventListener.showAd();
}

public void loadAd() {
gameEventListener.loadAd();
}

public boolean isShowing() {
return gameEventListener.isShowing();
}

public boolean isLoaded() {
return gameEventListener.isLoaded();
}
}

最后是 GameEventListener 接口(interface)

package com.JrodManU.LaserJumper;

public interface GameEventListener {
public void showAd();
public void loadAd();
public boolean isShowing();
public boolean isLoaded();
}

最佳答案

您的插页式广告位于单独的 Activity Ad 内,然后您可以像这样直接实例化它 Ad ad = new Ad();

你永远不应该像这样实例化Android Activity(它们启动Activity的方式是使用Intents),因为Activity必须遵守Activity lifecycle Android 将通过 Activity 生命周期方法进行调用。

结果是广告 Activity 的 onCreate() 方法不会被调用,并且您的 InterstitialAd 从未被实例化,这会导致稍后出现 NPE。

<小时/>

解决方案建议:

  • 不要为插页式广告创建额外的 Activity 。这根本没有必要。而是将插页式广告初始化移至 AndroidLauncher 内。
  • 使用处理程序来管理广告的显示/隐藏。此处描述:libgdx admob wiki 。 (本教程引用了旧版 admob,但与新版 admob 的差异很小,我仍然认为它是最好的教程)它的工作方式与普通横幅的工作方式几乎相同。

关于java - 我做错了什么,如何添加插页式广告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25632881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com