On Aug 13, 2012, at 7:40 AM, blorecrafter <[email protected]> wrote:
> I'm able to instantiate the class by the following statements:
>
> Java.Lang.Object jclassWrp_;
> IntPtr JavaScriptInterface_Class =
> JNIEnv.FindClass("mypackage.JavaScriptInterface");
JNI use should use JNI conventions, thus "mypackage/JavaScriptInterface" (note
'/' instead of '.').
> IntPtr JavaScriptInterface_ctor =
> JNIEnv.GetMethodID(JavaScriptInterface_Class, "<init>", "()V");
> IntPtr jsInterfaceinstance_ = JNIEnv.NewObject(JavaScriptInterface_Class,
> JavaScriptInterface_ctor);
> jclassWrp_ = new Java.Lang.Object(jsInterfaceinstance_,
> JniHandleOwnership.TransferGlobalRef);
JNIEnv.NewObject() returns a local ref, not a global ref, so you want
JniHandleOwnership.TransferLocalRef.
> But when i try to create the object to access the getSelctd() method:
>
> IntPtr ipApid = JNIEnv.GetMethodID(jclassWrp_, "getSelctd",
> "()Ljava/lang/String;");
JNIEnv.GetMethodID() takes a class handle, not an instance. Firstly, the above
shouldn't compile (Java.Lang.Object != IntPtr). Secondly, jclassWrp contains a
mypackage.JavaScriptInterface instance, not the mypackage.JavaScriptInterface
Class.
Instead, do:
IntPtr ipApid = JNIEnv.GetMethodID(JavaScriptInterface_Class,
"getSelctd", "()Ljava/lang/String;");
Finally, don't forget to JNIEnv.DeleteGlobalRef(JavaScriptInterface_Class) when
you don't need it anymore, otherwise you'll leak the gref.
- Jon
_______________________________________________
Monodroid mailing list
[email protected]
UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid