@@ -195,6 +195,15 @@ extern "C" JNIEXPORT jlong JNICALL Java_net_sourceforge_smallbasic_MainActivity_
195195 return runtime->getActivity ();
196196}
197197
198+ extern " C" JNIEXPORT void JNICALL Java_net_sourceforge_smallbasic_MainActivity_consoleLog
199+ (JNIEnv *env, jclass clazz, jstring jstr) {
200+ if (jstr != nullptr ) {
201+ const char *str = env->GetStringUTFChars (jstr, 0 );
202+ runtime->systemLog (str);
203+ env->ReleaseStringUTFChars (jstr, str);
204+ }
205+ }
206+
198207void onContentRectChanged (ANativeActivity *activity, const ARect *rect) {
199208 logEntered ();
200209 runtime->onResize (rect->right , rect->bottom );
@@ -355,6 +364,7 @@ String Runtime::getString(const char *methodName) {
355364 const char *resultStr = env->GetStringUTFChars (resultObj, JNI_FALSE);
356365 String result = resultStr;
357366 env->ReleaseStringUTFChars (resultObj, resultStr);
367+ env->DeleteLocalRef (resultObj);
358368 env->DeleteLocalRef (clazz);
359369 _app->activity ->vm ->DetachCurrentThread ();
360370 return result;
@@ -966,39 +976,35 @@ int Runtime::getFontId() {
966976
967977int Runtime::invokeRequest (int argc, slib_par_t *params, var_t *retval) {
968978 int result = 0 ;
969- if (argc >= 1 && argc < 5 &&
970- v_is_type (params[0 ].var_p , V_STR) &&
971- v_is_type (params[1 ].var_p , V_STR) &&
972- v_is_type (params[2 ].var_p , V_STR) &&
973- v_is_type (params[3 ].var_p , V_STR)) {
979+ if ((argc >= 1 && argc <= 4 && v_is_type (params[0 ].var_p , V_STR)) &&
980+ (argc < 2 || v_is_type (params[1 ].var_p , V_STR)) &&
981+ (argc < 3 || v_is_type (params[2 ].var_p , V_STR)) &&
982+ (argc < 4 || v_is_type (params[3 ].var_p , V_STR))) {
974983 JNIEnv *env;
975984 _app->activity ->vm ->AttachCurrentThread (&env, nullptr );
976985
977986 auto endPoint = env->NewStringUTF (v_getstr (params[0 ].var_p ));
978- auto method = env->NewStringUTF (v_getstr (params[1 ].var_p ));
979- auto data = env->NewStringUTF (v_getstr (params[2 ].var_p ));
980- auto apiKey = env->NewStringUTF (v_getstr (params[3 ].var_p ));
987+ auto method = env->NewStringUTF (argc < 2 ? " POST " : v_getstr (params[1 ].var_p ));
988+ auto data = env->NewStringUTF (argc < 3 ? " " : v_getstr (params[2 ].var_p ));
989+ auto apiKey = env->NewStringUTF (argc < 4 ? " " : v_getstr (params[3 ].var_p ));
981990
982991 jclass clazz = env->GetObjectClass (_app->activity ->clazz );
983992 const char *signature = " (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" ;
984993 jmethodID methodId = env->GetMethodID (clazz, " request" , signature);
985- jstring resultStr = (jstring)env->CallObjectMethod (_app->activity ->clazz , methodId, endPoint, method, data, apiKey);
986- const char *str = env->GetStringUTFChars (resultStr, JNI_FALSE);
987- v_init (retval);
994+ jstring jstr = (jstring)env->CallObjectMethod (_app->activity ->clazz , methodId, endPoint, method, data, apiKey);
995+ const char *str = env->GetStringUTFChars (jstr, JNI_FALSE);
988996 v_setstr (retval, str);
989- result = 1 ;
990-
991- env->ReleaseStringUTFChars (resultStr, str);
992- env->DeleteLocalRef (resultStr);
997+ result = strncmp (str, " [error:" , 7 ) == 0 ? 0 : 1 ;
998+ env->ReleaseStringUTFChars (jstr, str);
999+ env->DeleteLocalRef (jstr);
9931000 env->DeleteLocalRef (clazz);
9941001 env->DeleteLocalRef (endPoint);
9951002 env->DeleteLocalRef (method);
9961003 env->DeleteLocalRef (data);
9971004 env->DeleteLocalRef (apiKey);
9981005
9991006 _app->activity ->vm ->DetachCurrentThread ();
1000- }
1001- if (!result) {
1007+ } else {
10021008 v_setstr (retval, " invalid arguments" );
10031009 }
10041010 return result;
@@ -1493,3 +1499,4 @@ void sblib_close(void) {
14931499 runtime->getBoolean (" closeLibHandlers" );
14941500 runtime->disableSensor ();
14951501}
1502+
0 commit comments