我正在使用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