我正在使用libGDX框架,当我试图将一个类传递到初始化语句的应用程序侦听器中时,我得到了这个错误:
01-04 15:43:13.046: D/SensorManager(19487): onAccuracyChanged :: accuracy = 3
01-04 15:43:38.032: D/ActivityThread(2757): setTargetHeapUtilization:0.25
01-04 15:43:38.032: D/ActivityThread(2757): setTargetHeapIdealFree:8388608
01-04 15:43:38.032: D/ActivityThread(2757): setTargetHeapConcurrentStart:2097152
01-04 15:43:38.373: W/dalvikvm(2757): threadid=1: thread exiting with uncaught exception (group=0x4159a438)
01-04 15:43:38.383: E/AndroidRuntime(2757): FATAL EXCEPTION: main
01-04 15:43:38.383: E/AndroidRuntime(2757): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.audiack.freetappgame/com.audiack.freetappgame.MainActivity}: java.lang.NullPointerException
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.app.ActivityThread.access$700(ActivityThread.java:143)
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.os.Handler.dispatchMessage(Handler.java:99)
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.os.Looper.loop(Looper.java:137)
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.app.ActivityThread.main(ActivityThread.java:4950)
01-04 15:43:38.383: E/AndroidRuntime(2757): at java.lang.reflect.Method.invokeNative(Native Method)
01-04 15:43:38.383: E/AndroidRuntime(2757): at java.lang.reflect.Method.invoke(Method.java:511)
01-04 15:43:38.383: E/AndroidRuntime(2757): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
01-04 15:43:38.383: E/AndroidRuntime(2757): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
01-04 15:43:38.383: E/AndroidRuntime(2757): at dalvik.system.NativeStart.main(Native Method)
01-04 15:43:38.383: E/AndroidRuntime(2757): Caused by: java.lang.NullPointerException
01-04 15:43:38.383: E/AndroidRuntime(2757): at com.audiack.freetappgame.StartAppHandler.showAds(StartAppHandler.java:13)
01-04 15:43:38.383: E/AndroidRuntime(2757): at Screens.FreeTappGame.<init>(FreeTappGame.java:25)
01-04 15:43:38.383: E/AndroidRuntime(2757): at com.audiack.freetappgame.MainActivity.onCreate(MainActivity.java:24)
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.app.Activity.performCreate(Activity.java:5179)
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
01-04 15:43:38.383: E/AndroidRuntime(2757): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
01-04 15:43:38.383: E/AndroidRuntime(2757): ... 11 more我正在尝试将一个带有接口的类传递到ApplicationListener的构造函数中,这样我就可以从libGDX通用框架访问android广告方法。
下面是activity类:
package com.audiack.freetappgame;
import Screens.FreeTappGame;
import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.badlogic.gdx.graphics.Texture;
import com.searchboxsdk.android.StartAppSearch;
import com.startapp.android.publish.StartAppAd;
public class MainActivity extends AndroidApplication{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
StartAppAd.init(this, "101164873", "201640058");
StartAppSearch.init(this, "101164873", "201640058");
Texture.setEnforcePotImages(false);
cfg.useGL20 = true;
initialize(new FreeTappGame(new StartAppHandler()), cfg);
}
}下面是我希望在android端实现的接口:
package UtilityClasses;
public interface StartAppResolver {
public boolean showAds(boolean show);
}下面是在android项目中实现接口的类:
package com.audiack.freetappgame;
import UtilityClasses.StartAppResolver;
import com.badlogic.gdx.Gdx;
import com.startapp.android.publish.StartAppAd;
public class StartAppHandler implements StartAppResolver{
protected StartAppAd startAppAd;
@Override
public boolean showAds(boolean show) {
Gdx.app.log("Ad", "ad command will be here");
return true;
}
}最后是ApplicationListener类:
package Screens;
import UtilityClasses.Assets;
import UtilityClasses.StartAppResolver;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
public class FreeTappGame extends Game implements ApplicationListener {
static float Width;
static float Height;
public StartAppResolver startAppResolver;
public SplashScreen splash_screen;
public MenuScreen menu_screen;
public GameScreen game_screen;
public HighscoreScreen highscore_screen;
public AboutScreen about_screen;
public FreeTappGame(StartAppResolver startAppResolver) {
this.startAppResolver = startAppResolver;
startAppResolver.showAds(true);
}
@Override
public void create() {
Width = Gdx.graphics.getWidth();
Height = Gdx.graphics.getHeight();
Assets.load();
splash_screen = new SplashScreen(this);
menu_screen = new MenuScreen(this);
game_screen = new GameScreen(this);
highscore_screen = new HighscoreScreen(this);
about_screen = new AboutScreen(this);
setScreen(splash_screen);
}
}我是不是走错路了?我不确定如何使用libGDX访问广告方法,这是我的最终目标。
发布于 2014-01-05 07:01:52
我觉得这行导致了你的NullPointerException
Gdx.app.log("Ad", "ad command will be here");这是因为您在初始化GDX库之前创建了FreeTappGame对象,所以当调用此方法时,Libgdx尚未初始化Gdx.app全局变量。
https://stackoverflow.com/questions/20927382
复制相似问题