我开发了一个带有libGDX的Android应用程序并添加了Admob,但是当我在Android上打开APK时它会崩溃,说明该进程已经停止。
这是Android项目中的代码。
public class MainActivity extends AndroidApplication{
protected AdView adview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
cfg.useGL20 = true;
final TelephonyManager tm =(TelephonyManager)getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
String deviceid = tm.getDeviceId();
RelativeLayout layout = new RelativeLayout(this);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
setContentView(graphics.getView(), createLayoutParams());
View gameview = initializeForView(new BalloonBreakout(), false);
adview = new AdView(this);
adview.setAdSize(AdSize.BANNER);
adview.setAdUnitId("ca-app-pub-6258330641042393/6188790266");
adview.loadAd(new AdRequest.Builder().addTestDevice(deviceid).build());
RelativeLayout.LayoutParams adparams = new RelativeLayout.LayoutParams(Gdx.graphics.getWidth(), Gdx.graphics.getHeight() / 14);
adparams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
adparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
layout.addView(gameview);
layout.addView(adview, adparams);
setContentView(layout);
}
}
我不确定为什么会崩溃,我们将非常感谢任何帮助。
更新:
我在这里收到了错误日志,但我不知道为什么我会得到一个空指针。
E( 3875) Caused by: java.lang.NullPointerException (AndroidRuntime)
E( 3875) at com.sevenbit.Balloon_Breakout.MainActivity.onCreate(MainActivity.java:37)(AndroidRuntime)
第37行是:
setContentView(graphics.getView(), createLayoutParams());
但是当我删除这一行时,我仍然在同一个地方得到一个空指针,第37行。
有什么想法吗?
答案 0 :(得分:1)
您的问题(就像我最近看到的所有其他libgdx帖子一样)是libgdx AndroidApplication #initializeForView调用Activity #setContextView来设置自己的布局(它不应该这样)。然后使用您自己的布局调用setContextView。
它崩溃大概是因为一些libgdx代码假设它的布局对象已经加载但是它不存在,因为你已经用你自己的替换它。
答案 1 :(得分:0)
您应该发布或查看堆栈跟踪。这将告诉您代码失败的行。否则,人们将不得不通过查看您的代码来猜测。问题可能出在任何地方。