gpt4 book ai didi

android - 如何在 JNI 中从 C# 将参数传递给 Java 方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:43 26 4
gpt4 key购买 nike

我在 Unity3D 中工作并用 C# 编写我的脚本。我想从 c# 脚本调用我的 java 方法,它采用 bool 类型的参数,但我不知道如何使用 JNI 从 C# 传递参数。我能够调用不带任何参数的方法。这是我尝试调用不带任何参数的方法并且工作正常的方法。

private int BtnMyAppWall;
// create a JavaClass object...
IntPtr cls_JavaClass = JNI.FindClass("com/example/unitybuttontry/MainActivity");
int mid_JavaClass = JNI.GetMethodID(cls_JavaClass, "<init>", "(Landroid/app/Activity;)V");
IntPtr obj_JavaClass = JNI.NewObject(cls_JavaClass, mid_JavaClass, obj_Activity);
Debug.Log("JavaClass object = " + obj_JavaClass);

// create a global reference to the JavaClass object and fetch method id(s)..
JavaClass = JNI.NewGlobalRef(obj_JavaClass);

BtnMyAppWall = JNI.GetMethodID(cls_JavaClass, "myAppWall", "()Ljava/lang/String;");

// get the Java String object from the JavaClass object
IntPtr str_cacheDir = JNI.CallObjectMethod(JavaClass, BtnMyAppWall);

现在,如果我想传递一个 bool 类型的参数,那么我需要像这样更改我的最后两个语句:

  Stmt 1:  BtnMyAppWall = JNI.GetMethodID(cls_JavaClass, "myAppWall", "(Z)Ljava/lang/String;");

Stmt 2: // get the Java String object from the JavaClass object
IntPtr str_cacheDir = JNI.CallObjectMethod(JavaClass, BtnMyAppWall,true);

你可以在 Stmt 1 中看到,我提到了“Z”,这意味着我的方法将采用 bool 参数,但在 Stmt2 中,当我传递我的值时,它会给出错误:

错误:无法将 object' 表达式转换为类型System.IntPtr'

请帮帮我。

最佳答案

你需要使用Android.Runtime.JValue:

// get the Java String object from the JavaClass object
IntPtr str_cacheDir = JNI.CallObjectMethod(obj_JavaClass, BtnMyAppWall, new JValue(true));

关于android - 如何在 JNI 中从 C# 将参数传递给 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20789095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com