CRPropRef CRJNIEnv::fromJavaProperties( jobject jprops ) { CRPropRef props = LVCreatePropsContainer(); CRObjectAccessor jp(env, jprops); CRMethodAccessor p_getProperty(jp, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;"); jobject en = CRMethodAccessor( jp, "propertyNames", "()Ljava/util/Enumeration;").callObj(); CRObjectAccessor jen(env, en); CRMethodAccessor jen_hasMoreElements(jen, "hasMoreElements", "()Z"); CRMethodAccessor jen_nextElement(jen, "nextElement", "()Ljava/lang/Object;"); while ( jen_hasMoreElements.callBool() ) { jstring key = (jstring)jen_nextElement.callObj(); jstring value = (jstring)p_getProperty.callObj(key); props->setString(LCSTR(fromJavaString(key)),LCSTR(fromJavaString(value))); env->DeleteLocalRef(key); env->DeleteLocalRef(value); } return props; }
void CRJNIEnv::fromJavaStringArray( jobjectArray array, lString16Collection & dst ) { dst.clear(); int len = env->GetArrayLength(array); for ( int i=0; i<len; i++ ) { jstring str = (jstring)env->GetObjectArrayElement(array, i); dst.add(fromJavaString(str)); env->DeleteLocalRef(str); } }
std::string AndroidUtil::convertNonUtfString(const std::string &str) { const int len = str.length(); if (len == 0) { return str; } JNIEnv *env = getEnv(); jchar *chars = new jchar[len]; for (int i = 0; i < len; ++i) { chars[i] = (unsigned char)str[i]; } jstring javaString = env->NewString(chars, len); const std::string result = fromJavaString(env, javaString); env->DeleteLocalRef(javaString); delete[] chars; return result; }