Working on trying to pass objects, unwrap them to C/C++ types, do something, then return the result as an object. Now I get why people say JNI is tricky

This commit is contained in:
amazing-username
2019-10-10 18:40:16 -04:00
parent 6b746cd1d0
commit 878c62f2cb
24 changed files with 337 additions and 843 deletions
+40 -3
View File
@@ -251,7 +251,7 @@ Java_com_example_mear_activities_LoginActivity_retrieveSong(
extern "C"
JNIEXPORT jobject
JNICALL
Java_com_example_mear_activities_LoginActivity_retrieveUserCredentials(
Java_com_example_mear_repositories_UserRepository_retrieveUserCredentials(
JNIEnv *env,
jobject thisObj,
jstring dataPath
@@ -275,6 +275,43 @@ Java_com_example_mear_activities_LoginActivity_retrieveUserCredentials(
return userObj;
}
extern "C"
JNIEXPORT jobject
JNICALL
Java_com_example_mear_repositories_UserRepository_logUser(
JNIEnv *env,
jobject thisObj,
jobject user,
jstring apiUri ) {
jclass userClass = env->GetObjectClass(user);
//auto tok = env->CallObjectMethod(token, env->GetMethodID(tokenClass, "setAccessToken", "(Ljava/lang/String;)V"));
auto passwordField = env->GetFieldID(userClass, "getPassword", "(Ljava/lang/String;)V");
//auto passwordM = env->CallObjectMethod(user, env->GetMethodID(userClass, "password", "(Ljava/lang/String;)V"));
//auto passwordMOne = env->CallObjectMethod(user, env->GetMethodID(userClass, "getPassword", "(Ljava/lang/String;)V"));
auto password = env->GetObjectField(user, passwordField);
//auto username = env->CallObjectMethod(user, env->GetMethodID(userClass, "setUsername", "(Ljava/lang/String;)V"));
auto usernameField = env->GetFieldID(userClass, "setUsername", "(Ljava/lang/String;)V");
auto username = env->GetObjectField(user, usernameField);
const std::string usr = env->GetStringUTFChars((jstring)username, nullptr);
const std::string pass = env->GetStringUTFChars((jstring)password, nullptr);
const std::string api = env->GetStringUTFChars(apiUri, nullptr);
model::Token token(fetchToken(usr, pass, api));
jclass tokenClass = env->FindClass( "com/example/mear/models/Token");
jmethodID jconstructor = env->GetMethodID( tokenClass, "<init>", "()V" );
jobject tokenObj = env->NewObject( tokenClass, jconstructor );
jmethodID tokenAccess = env->GetMethodID( tokenClass, "setAccessToken", "(Ljava/lang/String;)V" );
jstring title = env->NewStringUTF(token.accessToken.c_str());
env->CallVoidMethod(tokenObj, tokenAccess, title);
return tokenObj;
}
extern "C"
JNIEXPORT jstring
@@ -299,7 +336,7 @@ Java_com_example_mear_activities_LoginActivity_logUser(
extern "C"
JNIEXPORT jboolean
JNICALL
Java_com_example_mear_activities_LoginActivity_isUserTableEmpty(
Java_com_example_mear_repositories_UserRepository_isUserTableEmpty(
JNIEnv *env,
jobject thisObj,
jstring dataPath
@@ -313,7 +350,7 @@ Java_com_example_mear_activities_LoginActivity_isUserTableEmpty(
extern "C"
JNIEXPORT jboolean
JNICALL
Java_com_example_mear_activities_LoginActivity_doesDatabaseExist(
Java_com_example_mear_repositories_BaseRepository_doesDatabaseExist(
JNIEnv *env,
jobject thidObj,
jstring dataPath