JNI Warnig ожидал возвращаемый тип 'L', вызывая LocationManager.requestLocationUpdates - PullRequest
8 голосов
/ 16 мая 2011

Я использую Necessitas (QT в Android).По сути, при использовании Andrid NDK активность Android вызывает приложение QT (.so).

Я работаю над некоторыми привязками для GPS.Я думаю, что получаю, однако я получаю ПРЕДУПРЕЖДЕНИЕ JNI ( JNI Warnig ожидаемый тип возврата 'L' ), когда я вызываю метод requestLocationUpdates (String, Long, Float, LocationListener).

Вот часть кода:

midGetSystemService = currEnv->GetMethodID(actClass,"getSystemService","(Ljava/lang/String;)Ljava/lang/Object;");

jSystemServiceObj = currEnv->CallObjectMethod(currAct,midGetSystemService,StringArg);

midRequestLocationUpdates = currEnv->GetMethodID(locManClass,"requestLocationUpdates","(Ljava/lang/String;JFLandroid/location/LocationListener;)V");


midConstListener = currEnv->GetMethodID(listenerClass, "<init>", "()V");
jListenerObj = currEnv->NewObject(listenerClass, midConstListener);


currEnv->CallObjectMethod(jSystemServiceObj,midRequestLocationUpdates,StringArg,(jlong)1000,(jfloat)10,jListenerObj);  --->Here is the warning

Есть идеи почему?

1 Ответ

16 голосов
/ 17 ноября 2011

Вы вызываете метод, который возвращает «void»:

midConstListener = currEnv->GetMethodID(listenerClass, "<init>", "()V");

, используя вызов JNI, который ожидает в ответ объект JNI:

// BAD
currEnv->CallObjectMethod(jSystemServiceObj,midRequestLocationUpdates,StringArg,(jlong)1000,(jfloat)10,jListenerObj);

Вместо этого следует использовать JNIвызов, который ожидает void в ответ:

// GOOD
currEnv->CallVoidMethod(jSystemServiceObj,midRequestLocationUpdates,StringArg,(jlong)1000,(jfloat)10,jListenerObj);
...