【问题标题】:Problems with programming google play services plugin for unity为统一编写谷歌播放服务插件的问题
【发布时间】:2014-07-14 09:28:31
【问题描述】:

在尝试构建我的第一个游戏应用时,我遇到了一些超出我编程知识的问题。

我使用 Unity 来制作我的游戏,并使用 eclipse 制作了一个可以工作的 admob 插件,以便在统一中使用。我按照this 教程这样做。

到目前为止没有问题,并且凭借我对制作统一插件的新知识,我决定根据谷歌找到的教程制作第二个插件here

但是,为了使我的插件正常工作,我不能“扩展”插件的类。这让我很困惑,因为如果我不使用“扩展”,我将没有 onCreate、onActivityResult 等回调。

我知道一定有办法让这个工作,但是我对java的了解太少,无法解决这个问题。

我已经尝试了各种各样的方法来至少编译代码,但基本上我只是在黑暗中摇摆。

我的代码已经到此为止了,不用说它只会在我调用 Test() 时让我的游戏崩溃:

package google.signin;

import com.google.android.gms.ads.*;
import com.google.example.games.basegameutils.GameHelper;
import com.google.example.games.basegameutils.GameHelper.GameHelperListener;
import com.unity3d.player.UnityPlayer;

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

public class SignIn {

    private Activity activity; //Store the android main activity

    private GameHelper mHelper;

    public SignIn()
    {
        activity = UnityPlayer.currentActivity;


        activity.runOnUiThread(new Runnable() {
            public void run(){

                Activity subactivity = new Activity() {

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

                        // create game helper with all APIs (Games, Plus, AppState):
                        mHelper = new GameHelper(this, GameHelper.CLIENT_ALL);

                        GameHelperListener listener = new GameHelper.GameHelperListener() {
                            @Override
                            public void onSignInSucceeded() {
                                // handle sign-in success
                            }
                            @Override
                            public void onSignInFailed() {
                                // handle sign-in failure (e.g. show Sign In button)
                            }

                        };
                        mHelper.setup(listener);
                    }

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

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

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

    public void Test()
    {
        activity.runOnUiThread(new Runnable() {
            public void run(){

                mHelper.beginUserInitiatedSignIn();

            }
        });
    }
}

Logcat 说这是问题所在:

07-14 11:19:10.786: E/AndroidRuntime(31262): FATAL EXCEPTION: main
07-14 11:19:10.786: E/AndroidRuntime(31262): Process: com.ChocolatePinecone.PrincessRescueRun, PID: 31262
07-14 11:19:10.786: E/AndroidRuntime(31262): java.lang.Error: FATAL EXCEPTION [main]
07-14 11:19:10.786: E/AndroidRuntime(31262): Unity version     : 4.3.4f1
07-14 11:19:10.786: E/AndroidRuntime(31262): Device model      : samsung GT-I9505
07-14 11:19:10.786: E/AndroidRuntime(31262): Device fingerprint: samsung/jfltexx/jflte:4.4.2/KOT49H/I9505XXUGNF1:user/release-keys
07-14 11:19:10.786: E/AndroidRuntime(31262): Caused by: java.lang.NullPointerException
07-14 11:19:10.786: E/AndroidRuntime(31262):    at google.signin.SignIn$2.run(SignIn.java:78)
07-14 11:19:10.786: E/AndroidRuntime(31262):    at android.os.Handler.handleCallback(Handler.java:733)
07-14 11:19:10.786: E/AndroidRuntime(31262):    at android.os.Handler.dispatchMessage(Handler.java:95)
07-14 11:19:10.786: E/AndroidRuntime(31262):    at android.os.Looper.loop(Looper.java:157)
07-14 11:19:10.786: E/AndroidRuntime(31262):    at android.app.ActivityThread.main(ActivityThread.java:5356)
07-14 11:19:10.786: E/AndroidRuntime(31262):    at java.lang.reflect.Method.invokeNative(Native Method)
07-14 11:19:10.786: E/AndroidRuntime(31262):    at java.lang.reflect.Method.invoke(Method.java:515)
07-14 11:19:10.786: E/AndroidRuntime(31262):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
07-14 11:19:10.786: E/AndroidRuntime(31262):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
07-14 11:19:10.786: E/AndroidRuntime(31262):    at dalvik.system.NativeStart.main(Native Method)

我认为它崩溃是因为 onStart 和子活动中的所有内容都没有被调用。 我不知道我在这里所做的是否是解决这个问题的正确方向。在我继续挥杆之前,我希望这里有人可以启发我,或者至少给我一些指示......

【问题讨论】:

    标签: android eclipse plugins unity3d google-play-services


    【解决方案1】:

    无论您的 mHelper 对象是什么,您都没有根据我所见创建它。我以前从未使用过这个类,所以我不知道声明是否正确,但只是一个例子

    mHelper = new GameHelper();
    

    【讨论】:

    • 在子活动的onCreate函数中我创建了它:mHelper = new GameHelper(this, GameHelper.CLIENT_ALL);
    • 那肯定会被调用?在其中放置一些调试消息以确保。我认为 mHelper.beginUserInitialitedSignIn() 也是第 78 行?
    • mHelper.beginUserInitialitedSignIn() 确实是第 78 行。子活动生命周期(onCreate、onStart 等)根本没有被调用。也许我必须使用 startActivity(intent),但我不知道如何在我的代码中成功实现它。
    • 这是有道理的,因为您的课程不是一项活动。正如你所提到的,你不希望它成为一项活动,但我很想知道你为什么不能这样做?您可以在一个项目中进行多项活动。
    • 要成功地统一实现我的代码,该类可能不会扩展到任何东西。例如,一旦我将课程扩展到活动,从统一到课程的所有呼叫都停止工作。我的插件基于教程here
    猜你喜欢
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多