JNI - 如何获取 Double.toString() 方法以将 jdouble 转换为 jstring
JNI - How to get the Double.toString() method to convert a jdouble to a jstring
所以我希望能够使用以下方法将 jdouble 转换为 jstring
来自 c++.
的内置 Double.toString()
这就是我想我会做的。
jdouble result;
//Get the class for Double so we can get the method id of toString().
jclass doubleObjectClass = env->GetObjectClass("Ljava/lang/Double;");
//Get the Double.toString() method ID.
jmethodID doubleToStringMethodID = env->GetMethodID(doubleObjectClass, "toString",(Ljava/lang/String;");
//Call the toString() method on result.
jstring newString = env->CallObjectMethod(..., doubleToStringMethodID, result);
现在的问题是当我调用 getObjectClass 和 CallObjectMethod 时发生了什么。
对于 getObjectClass,它需要从内存中获取作业对象,而不是描述。
对于 CallObjectMethod,我们需要 Double 对象作为参数(其中“...”是)。
所以我不知道如何继续,因为文档对 atm 没有帮助。
如有帮助将不胜感激!
当您可以访问具体 jobject
时,您使用 GetObjectClass
。如果您只有一个 class 名称,那就是具有 class' 二进制名称的 FindClass
函数。您正在查找 static 方法 ID,因此这是一组不同的函数(GetStaticMethodID
和 CallStaticMethodID
)。最后,方法签名一定要正确。
综合起来:
jdouble result;
jclass doubleObjectClass = env->FindClass("java/lang/Double");
jmethodID doubleToStringMethodID = env->GetStaticMethodID(doubleObjectClass, "toString","(D)Ljava/lang/String;");
jstring newString = env->CallStaticObjectMethod(doubleObjectClass, doubleToStringMethodID, result);
所以我希望能够使用以下方法将 jdouble 转换为 jstring 来自 c++.
的内置 Double.toString()这就是我想我会做的。
jdouble result;
//Get the class for Double so we can get the method id of toString().
jclass doubleObjectClass = env->GetObjectClass("Ljava/lang/Double;");
//Get the Double.toString() method ID.
jmethodID doubleToStringMethodID = env->GetMethodID(doubleObjectClass, "toString",(Ljava/lang/String;");
//Call the toString() method on result.
jstring newString = env->CallObjectMethod(..., doubleToStringMethodID, result);
现在的问题是当我调用 getObjectClass 和 CallObjectMethod 时发生了什么。
对于 getObjectClass,它需要从内存中获取作业对象,而不是描述。
对于 CallObjectMethod,我们需要 Double 对象作为参数(其中“...”是)。
所以我不知道如何继续,因为文档对 atm 没有帮助。
如有帮助将不胜感激!
当您可以访问具体 jobject
时,您使用 GetObjectClass
。如果您只有一个 class 名称,那就是具有 class' 二进制名称的 FindClass
函数。您正在查找 static 方法 ID,因此这是一组不同的函数(GetStaticMethodID
和 CallStaticMethodID
)。最后,方法签名一定要正确。
综合起来:
jdouble result;
jclass doubleObjectClass = env->FindClass("java/lang/Double");
jmethodID doubleToStringMethodID = env->GetStaticMethodID(doubleObjectClass, "toString","(D)Ljava/lang/String;");
jstring newString = env->CallStaticObjectMethod(doubleObjectClass, doubleToStringMethodID, result);