Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从Unity&;发送价值观;收到我的插件的Java版本吗?_Android_Unity3d - Fatal编程技术网

Android 如何从Unity&;发送价值观;收到我的插件的Java版本吗?

Android 如何从Unity&;发送价值观;收到我的插件的Java版本吗?,android,unity3d,Android,Unity3d,我想为我的android插件将数据从Unity发送到java 这是我的统一代码: AndroidJNI.AttachCurrentThread(); IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer"); IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/

我想为我的android插件将数据从Unity发送到java

这是我的统一代码:

AndroidJNI.AttachCurrentThread();
IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
    IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
    IntPtr obj_Activity = AndroidJNI.GetStaticObjectField(cls_Activity, fid_Activity);                  
    Debug.Log("Setup Objects Complete");        

    IntPtr cls_OurAppNameActivityClass = AndroidJNI.FindClass("org/plugin/test/AdmobTestActivity"); 

    IntPtr startAdsMethod = AndroidJNI.GetMethodID(cls_OurAppNameActivityClass, "EnableAds", "(J)V");
    Debug.Log("before If Loop");        

    if (AndroidJNI.IsInstanceOf(obj_Activity, cls_OurAppNameActivityClass) != false)
    {
        //Debug.Log("Activity IS a OurAppNameActivity");
        jvalue[] myArray = new jvalue[1];
            myArray[0] = new jvalue();
            myArray[0].i = 12;
            AndroidJNI.CallVoidMethod(obj_Activity, startAdsMethod, myArray);                    

            Debug.Log("Activity Leaving a OurAppNameActivity");
    }
public void EnableAds(int qwe)
{       
    Log.i(APP_TAG, "Value" + qwe);
}
这是我的Java代码:

AndroidJNI.AttachCurrentThread();
IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
    IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
    IntPtr obj_Activity = AndroidJNI.GetStaticObjectField(cls_Activity, fid_Activity);                  
    Debug.Log("Setup Objects Complete");        

    IntPtr cls_OurAppNameActivityClass = AndroidJNI.FindClass("org/plugin/test/AdmobTestActivity"); 

    IntPtr startAdsMethod = AndroidJNI.GetMethodID(cls_OurAppNameActivityClass, "EnableAds", "(J)V");
    Debug.Log("before If Loop");        

    if (AndroidJNI.IsInstanceOf(obj_Activity, cls_OurAppNameActivityClass) != false)
    {
        //Debug.Log("Activity IS a OurAppNameActivity");
        jvalue[] myArray = new jvalue[1];
            myArray[0] = new jvalue();
            myArray[0].i = 12;
            AndroidJNI.CallVoidMethod(obj_Activity, startAdsMethod, myArray);                    

            Debug.Log("Activity Leaving a OurAppNameActivity");
    }
public void EnableAds(int qwe)
{       
    Log.i(APP_TAG, "Value" + qwe);
}
错误:

05-16 13:11:30.906: W/dalvikvm(12315): threadid=8: thread exiting with uncaught exception (group=0x40018578)
05-16 13:11:30.921: E/AndroidRuntime(12315): FATAL EXCEPTION: GLThread 9
05-16 13:11:30.921: E/AndroidRuntime(12315): java.lang.NoSuchMethodError: EnableAds
05-16 13:11:30.921: E/AndroidRuntime(12315):    at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
05-16 13:11:30.921: E/AndroidRuntime(12315):    at com.unity3d.player.UnityPlayer.onDrawFrame(Unknown Source)
05-16 13:11:30.921: E/AndroidRuntime(12315):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1368)
05-16 13:11:30.921: E/AndroidRuntime(12315):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1123)
并强制关闭..

如果我在java代码中从EnableAdv(intqwe)中删除int参数,那么这个应用程序可以正常工作


有人能告诉我,我在这段代码中遗漏了什么吗?

我找到了答案。

我想使用“(J)V”作为我的参数类型。。但是我应该用“(i)V)来代替这个

例如,Java方法:

AndroidJNI.AttachCurrentThread();
IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
    IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
    IntPtr obj_Activity = AndroidJNI.GetStaticObjectField(cls_Activity, fid_Activity);                  
    Debug.Log("Setup Objects Complete");        

    IntPtr cls_OurAppNameActivityClass = AndroidJNI.FindClass("org/plugin/test/AdmobTestActivity"); 

    IntPtr startAdsMethod = AndroidJNI.GetMethodID(cls_OurAppNameActivityClass, "EnableAds", "(J)V");
    Debug.Log("before If Loop");        

    if (AndroidJNI.IsInstanceOf(obj_Activity, cls_OurAppNameActivityClass) != false)
    {
        //Debug.Log("Activity IS a OurAppNameActivity");
        jvalue[] myArray = new jvalue[1];
            myArray[0] = new jvalue();
            myArray[0].i = 12;
            AndroidJNI.CallVoidMethod(obj_Activity, startAdsMethod, myArray);                    

            Debug.Log("Activity Leaving a OurAppNameActivity");
    }
public void EnableAds(int qwe)
{       
    Log.i(APP_TAG, "Value" + qwe);
}
长f(int n,字符串s,int[]arr); 具有以下类型签名:

“(ILjava/lang/String;[I)V


请参阅进一步阅读

我找到了答案。

我想用“(J)V”作为我的参数类型,但是我应该用“(I)V”来代替

例如,Java方法:

AndroidJNI.AttachCurrentThread();
IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
    IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
    IntPtr obj_Activity = AndroidJNI.GetStaticObjectField(cls_Activity, fid_Activity);                  
    Debug.Log("Setup Objects Complete");        

    IntPtr cls_OurAppNameActivityClass = AndroidJNI.FindClass("org/plugin/test/AdmobTestActivity"); 

    IntPtr startAdsMethod = AndroidJNI.GetMethodID(cls_OurAppNameActivityClass, "EnableAds", "(J)V");
    Debug.Log("before If Loop");        

    if (AndroidJNI.IsInstanceOf(obj_Activity, cls_OurAppNameActivityClass) != false)
    {
        //Debug.Log("Activity IS a OurAppNameActivity");
        jvalue[] myArray = new jvalue[1];
            myArray[0] = new jvalue();
            myArray[0].i = 12;
            AndroidJNI.CallVoidMethod(obj_Activity, startAdsMethod, myArray);                    

            Debug.Log("Activity Leaving a OurAppNameActivity");
    }
public void EnableAds(int qwe)
{       
    Log.i(APP_TAG, "Value" + qwe);
}
长f(int n,字符串s,int[]arr); 具有以下类型签名:

“(ILjava/lang/String;[I)V


请参阅进一步阅读

unity标记是针对Microsoft unity的。不要误用它。我找到了答案..我想使用“(J)V”作为参数类型..但是我应该使用“(I)V”来代替它。例如,Java方法:long f(int n,String s,int[]arr);具有以下类型签名:“(ILjava/lang/String;[I)V”请将您的发现作为答案发布,并在几小时后接受。注意,unity标记是针对Microsoft unity的。不要误用它。我找到了答案。我想使用“(J)V”作为参数类型。但我应该使用“(I)V”。例如,Java方法:long f(int n,String s,int[]arr);具有以下类型签名:“(ILjava/lang/String;[I)V”请将您的发现作为答案发布,并在几小时后接受。尊敬的,