2016-09-20 4 views
-1

ich Java in C obwohl jni nennen wollen, aber ich habe ein Problem:JNI: Wie benutzt man GetMethodID für getScanResults

Mein Code wie folgt:

m = (*env)->GetMethodID(env, clazz, "getScanResults", "()[B"); 
LOG_INFO("startScan Failed %d, %d", __LINE__,m); 
jobjectArray rArray = (*env)->CallObjectMethod(env, wifiMgrObj, m); 
... 

aber 'm' immer 0 zurück Ich denke "() [B] vielleicht falsch, aber ich weiß nicht, wie FIXIT, kann mir jemand helfen?


Hier ist die Android-API zu 'getScanResults' https://developer.android.com/reference/android/net/wifi/WifiManager.html#getScanResults()

getScanResults 

Added in API level 1 
List<ScanResult> getScanResults() 
Return the results of the latest access point scan. 

Returns List<ScanResult> the list of access points found in the most recent scan. An app must hold ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission in order to get valid results. If there is a remote exception (e.g., either a communication problem with the system service or an exception within the framework) an empty list will be returned. 
+0

siehe http://www.rgagnon.com/javadetails/java-0286.html – pskink

+0

Ich habe es, danke – zs2014

Antwort

1
  • Die API Sie zitiert haben, sagt, dass es ein List<ScanResult> zurückgibt.
  • Die JNI-Signatur, die Sie an GetMethodID() gesendet haben, besagt, dass sie eine byte[] zurückgibt. Es tut es nicht.

Moralisch: Raten Sie nicht über JNI-Signaturen. Verwenden Sie das Ergebnis javap -s. Es ist niemals falsch.

+0

Können Sie mir ein Beispiel geben? Ich habe versucht, aber nicht funktioniert: m = (* env) -> GetMethodID (env, clazz, "getScanResults", "() [ScanResult"); – zs2014

+0

@ zs2014 als EJP sagte: '" Moral: rate nicht über JNI-Signaturen "', hast du 'javap -s' versucht? das beantwortet deine Frage – pskink

+0

@ zs2014 Ich weiß nicht, warum du ein Beispiel für 'javap -s' brauchen würdest. Ich kann mich nicht davon überzeugen, dass du meine Antwort gelesen hast. – EJP