我正在使用Xamarin,需要通过调用两个静态Java方法,我已经链接到一个罐子里。这里是jar中的java类:如何将C#对象传递给Xamarin中的JNI方法?
package com.test;
public class Car {
public static Car makeCar(String name);
public void drawCar(ImageView imageview);
}
我不知道如何将这两个方法的参数传递给JNI代码。该JNIEnv.Call **()的方法类负责参数JValue []数组,我想用它来包装一个C#字符串,并将其命名为所有像这样:
// C#
string carName = "mustang";
JValue[] paramCarName = new JValue[] {
new JValue(JNIEnv.NewString(carName))
};
IntPtr theClass = JNIEnv.FindClass("com.test.Car");
IntPtr theMethod = JNIEnv.GetMethodID(theClass,
"makeCar", "()Ljava/lang/String;");
IntPtr resultCar = JNIEnv.CallStaticObjectMethod(
theClass, theMethod, paramCarName);
那是正确的用法?我在与调用第二个方法,它指的是Android的ImageView的一个C#版本的同一问题:
// C#
// Xamarin provides an ImageView wrapper class.
ImageView imageview = ...;
// Is it alright to use JNIEnv.ToJniHandle here to reference the imageview?
JValue[] paramCarName = new JValue[] {
new JValue (JNIEnv.ToJniHandle (imageview))
};
...
以上目前编译好,但我不能运行它,因为我只有免费版。任何有关这方面的信息都会很好,因为我确信我在滥用这个信息。
感谢
你是什么意思的“罐子我已经链接到”。您是否经历了创建Java绑定库的过程,以便在您尝试调用的Java代码周围添加C#包装器? – jensendp 2014-09-05 18:03:44
不,我试图避免Java绑定库。我尝试使用Xamarin工作室,它导致了很多错误(这是一个比我的例子更大的jar)。我希望我可以在应用程序发行版中包含jar,只需通过JNI调用我需要的两个方法,而不必创建Java绑定库。 – user291701 2014-09-05 23:41:48