16,229
社区成员
发帖
与我相关
我的任务
分享
#include <QApplication>
#include <QTranslator>
#include <QString>
#include <jni.h>
JavaVM* javaVM = NULL;
// JNI_OnLoad called after VM is initialized
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* /*reserved*/)
{
javaVM = vm; // save pointer
return JNI_VERSION_1_6;
}
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// getting JNIEnv object from Java VM
JNIEnv* env;
if (javaVM->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
return -1;
}
// Java class, that can get Local information
const char* QtActivityclassName = "java/util/Locale";
jclass clazz=env->FindClass(QtActivityclassName);
jmethodID constr = env->GetStaticMethodID(clazz, "getDefault", "()Ljava/util/Locale;");
// calling static method - getDefault() - getting java.util.Locale object
jobject obj1 = env->CallStaticObjectMethod(clazz,constr);
jclass appClass1 = env->GetObjectClass(obj1);
constr = env->GetMethodID(appClass1, "getLanguage", "()Ljava/lang/String;");
// calling method of java.util.Locale object - getLanguage()
jstring result = (jstring)env->CallObjectMethod(obj1, constr);
// converting jstring to QString
const char *strResult = env->GetStringUTFChars( result, 0 );
QString str(strResult);
env->ReleaseStringUTFChars( result, strResult);
QTranslator myappTranslator;
// taking .qm file from resource
myappTranslator.load(":/MyAppName_" + str);
app.installTranslator(&myappTranslator);
return app.exec();
}
[/quote]恩,已经解决了,可以返回jstring了#include <QApplication>
#include <QTranslator>
#include <QString>
#include <jni.h>
JavaVM* javaVM = NULL;
// JNI_OnLoad called after VM is initialized
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* /*reserved*/)
{
javaVM = vm; // save pointer
return JNI_VERSION_1_6;
}
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// getting JNIEnv object from Java VM
JNIEnv* env;
if (javaVM->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
return -1;
}
// Java class, that can get Local information
const char* QtActivityclassName = "java/util/Locale";
jclass clazz=env->FindClass(QtActivityclassName);
jmethodID constr = env->GetStaticMethodID(clazz, "getDefault", "()Ljava/util/Locale;");
// calling static method - getDefault() - getting java.util.Locale object
jobject obj1 = env->CallStaticObjectMethod(clazz,constr);
jclass appClass1 = env->GetObjectClass(obj1);
constr = env->GetMethodID(appClass1, "getLanguage", "()Ljava/lang/String;");
// calling method of java.util.Locale object - getLanguage()
jstring result = (jstring)env->CallObjectMethod(obj1, constr);
// converting jstring to QString
const char *strResult = env->GetStringUTFChars( result, 0 );
QString str(strResult);
env->ReleaseStringUTFChars( result, strResult);
QTranslator myappTranslator;
// taking .qm file from resource
myappTranslator.load(":/MyAppName_" + str);
app.installTranslator(&myappTranslator);
return app.exec();
}
// C++ code
QAndroidJniObject string1 = QAndroidJniObject::fromString("String1");
QAndroidJniObject string2 = QAndroidJniObject::fromString("String2");
QAndroidJniObject stringArray = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/TestClass",
"stringArray"
"(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;"
string1.object<jstring>(),
string2.object<jstring>());