当前位置: 首页 > 知识库问答 >
问题:

使用LibGDX和BaseGameUtils创建gameHelper时,如何修复空指针异常?

申屠晟
2023-03-14

我目前正在开发我的第一个游戏(我不会无耻地推广),但我正试图建立一个排行榜,但当我尝试初始化我的GameHelper时,我得到了一个例外。我找不到任何答案,如果有任何帮助,我将不胜感激。

代码:

package com.aidanstrong.runner;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.google.android.gms.games.Games;
import com.google.example.games.basegameutils.GameHelper;
import com.google.example.games.basegameutils.GameHelper.GameHelperListener;

public class AndroidLauncher extends AndroidApplication implements GameHelperListener, PlayServices{

private final static int requestCode = 1;
private GameHelper gameHelper;

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
    initialize(new MyGame(this), config);
    gameHelper = new GameHelper(this,GameHelper.CLIENT_ALL);
    gameHelper.enableDebugLog(true);
    gameHelper.setup(this);
}

@Override
public void onStart(){
    super.onStart();
    gameHelper.onStart(this);
}

@Override
public void onStop(){
    super.onStop();
    gameHelper.onStop();
}

@Override
public void onActivityResult(int request, int response, Intent data) {
    super.onActivityResult(request, response, data);
    gameHelper.onActivityResult(request, response, data);
}

@Override
public boolean signIn() {
    return gameHelper.isSignedIn();
}

@Override
public void logIn() {
    try {
        runOnUiThread(new Runnable(){
            public void run() {
                gameHelper.beginUserInitiatedSignIn();
            }
        });
    } catch (final Exception ex) {
    }
}

@Override
public void submitScore(int score) {
    Games.Leaderboards.submitScore(gameHelper.getApiClient(),"CgkIlKy-68IeEAIQAQ",score);
}


@Override
public void getLeaderboard() {
    Games.Leaderboards.getLeaderboardIntent(gameHelper.getApiClient(),"CgkIlKy-68IeEAIQAQ");
}

@Override
public void onSignInFailed() {
}

@Override
public void onSignInSucceeded() {
}
}

我收到的错误是

“java.lang.RuntimeException:无法实例化活动组件信息{com.aidanstrong.runner/com.aidanstrong.runner.AndroidLauncher}:java.lang.NullPointerException:尝试在第21行的空对象引用上调用虚拟方法'android.content.Context.getApplicationContext()”。

编辑:我尝试了一下,得到了一个新的错误,将构造函数中的所有语句移动到gameHelper之前。设置(此)我得到错误

致命的例外:主要过程:com.aidanstrong.runner,PID:11950java.lang.NoSuchMEDADError:没有直接的方法(Ljava/lang/String; Lcom/谷歌/Android/gms/通用/api/Api$zza; Lcom/谷歌/Android/gms/通用/api/Api$zzc;)类中的V Lcom/谷歌/Android/gms/通用/API/Api;或其超级类(声明的'com.google.android.gms.common.api.Api'出现在 /data/app/com.aidanstrong.runner-1/split_lib_dependencies_apk.apk)在com.google.android.gms.plus.Plus.(未知来源)在com.google.example.games.basegameutils.GameHelper.createApiClientBuilder(GameHelper.java:276)在com.google.example.games.basegameutils.GameHelper.setup(GameHelper.java:309)在com.aidanstrong.runner.Androidauncher.on创建(Androidauncher.java:32)在android.app.ctivity.perform创建(ctivity.java:6270)在android.app.我nstrumentation.callActivityOn创建(仪器. java: 1130)在android. app.在android. app.在android. app.wrap11(ActivityThread. java)在android. app.ActivityThread$H. handleMessage(ActivityThread. java: 1363)at android. os.在android. os.在android. app.ActivityThread. main(ActivityThread. java: 5491)在java. lang.反射。方法调用(本机方法)在com. android. interal. os。ZygoteInit$method odAndArgsCaller. run(ZygoteInit. java: 728)在com. android. interal. os。主要(ZygoteInit. java: 618)'

    <?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.aidanstrong.runner"
    android:versionCode="6"
    android:versionName="1.22" >
   <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="25" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE"/>


    <application

        android:allowBackup="true"
       android:icon="@drawable/secondicon"
        android:label="Jump Man"
        android:theme="@style/GdxTheme" >
        <activity
        android:name="com.aidanstrong.runner.AndroidLauncher"
        android:label="Jump Man"
        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>
    <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
    <meta-data android:name="com.google.android.gms.appstate.APP_ID" android:value="@string/app_id" />
</application>

共有1个答案

欧阳睿范
2023-03-14

将元数据保存在

<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
<meta-data android:name="com.google.android.gms.appstate.APP_ID" android:value="@string/app_id" />

删除默认的构造函数

public class AndroidLauncher extends AndroidApplication implements IGoogleServices {

private GameHelper gameHelper;
private final static int REQUEST_CODE_UNUSED = 9002;
private static final String TAG = "[" + AndroidLauncher.class.getSimpleName() + "]";

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES);
    gameHelper.enableDebugLog(true);
    GameHelper.GameHelperListener gameHelperListener = new GameHelper.GameHelperListener() {
        @Override
        public void onSignInSucceeded(){}

        @Override
        public void onSignInFailed() {}
    };

    //gameHelper.setMaxAutoSignInAttempts(0);
    gameHelper.setup(gameHelperListener);

    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();

    initialize(new MyGame(this), config);
}

@Override
protected void onStart() {
    super.onStart();
    gameHelper.onStart(this);
}

@Override
protected void onStop() {
    super.onStop();
    gameHelper.onStop();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    gameHelper.onActivityResult(requestCode, resultCode, data);
}

@Override
public void signIn() {
    try {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                gameHelper.beginUserInitiatedSignIn();
            }
        });
    }
    catch (Exception e) {
        Gdx.app.log("MainActivity", "Log in failed: " + e.getMessage() + ".");
    }
}

 @Override
public void signOut() {
    try {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                //gameHelper.signOut();
            }
        });
    }
    catch (Exception e) {
        Gdx.app.log("MainActivity", "Log out failed: " + e.getMessage() + ".");
    }
}

 @Override
public void submitScore(long score) {
    if (isSignedIn()) Games.Leaderboards.submitScore(gameHelper.getApiClient(), getString(R.string.leaderboard_id), score);
}

@Override
public void showScores() {
    if(isSignedIn())
        startActivityForResult(Games.Leaderboards.getLeaderboardIntent(gameHelper.getApiClient(), getString(R.string.leaderboard_id)), REQUEST_CODE_UNUSED);
    else
        signIn();
}

@Override
public boolean isSignedIn() {
    return gameHelper.isSignedIn();
}

@Override
public void start() {
    gameHelper.onStart(this);
}

IGoogleServices是core模块中的一个接口,我使用它与android模块进行接口。

 类似资料:
  • 我正试着数字符串中元音的数目。问题是它编译正确,但当我运行它时,命令窗口显示“countvowels.main(countvowels.java:25)处线程'main'java.lang.NullPointerException”。 是什么导致了这一点,我该如何修复它,我该如何防止它在未来再次发生? 第25行是我的if语句:

  • > 单击 受保护得空onPrepareDialog(int id,Dialog Dialog) 受保护的对话框onCreateDialog(int id) 如果我对timepickerdialog代码做了什么错误,请告诉我。

  • 问题内容: 什么是Java空指针异常,它是如何发生的?如何修改? 问题答案: 当我们创建一个引用类型的变量时,实际上是创建了一个指向该变量的一个指针,例如: 这种情况下是,tom 其实是指向Person对象的一个指针。 如果我们访问一个没有初始化的对象时,就会出现空指针异常。例如,我们声明了一个Person对象tom,而没有给tom赋值(初始化),这样再调用tom的方法是就会出现空指针异常。 输出

  • 问题内容: 有可能这可能是一个双重问题。我将String变量初始化为null。我可能会或可能不会使用一个值更新它。现在我想检查此变量是否不等于null以及我尝试执行的操作是否会得到null指针异常。空指针异常,因为它代价高昂。是否有任何有效的解决方法.TIA 问题答案: 如果您使用 你 不会 得到。 我怀疑你在做什么: 这是因为null 而引发,而不是因为null。 如果仍然无法解释,请发布您用于

  • 我已经更新了我的项目中的一些依赖关系之后,我的Hibernate配置类显示Nullpointerx的。 我将SpringDataJPA存储库与hibernate一起使用,已经超过24小时了,仍然没有找到任何关于小问题的适当解决方案。 我已经尝试过的一些解决方案:- 使用@bean(name=“entityManagerFactory”)提供bean名称 我面临的问题 波姆。xml文件 配置类 db