有一個JAVA層函數,如下:
private void postAudioDataFromNative(int clientId, int dataLen, byte[] dataBuffer,
long presentTimeUs, String audioType) {
...
}
JNI層處理如下:
調用JAVA層函數時
這樣組合使用後, 在JAVA函數中添加列印, String audioType 的值一直未null(但是在傳入前,type值是正常的),而其他參數都是有值的, 且正常。
同樣的代碼,僅修改參數順序, 代碼變為如下:
JAVA層
private void postAudioDataFromNative(int clientId, int dataLen, byte[] dataBuffer,
String audioType, long presentTimeUs) {
...
}
JNI層
調用
這樣組合使用後, 在JAVA函數中添加列印,所有參數值都正常。
有哪位大神指導下,這是為什麼? 不勝感激~~~
為什麼String類型的參數必須在long型參數前, 而不能放在long型參數後。(測試int型,也是隻能放在long型前, 如果放在long型後, 值總是0, 而不是傳入的值(比如傳入2, 但是總是獲得0))
問題原因:
在論壇裡一位大神恢複後, 按照大神的提示, 我檢查了接口參數中的資料類型所占長度, 發現JAVA層和Native中所占長度不一樣, 修改為一樣長度, 即都是32位後, 該問題解決了。 看來是資料類型長度不對等, 造成後邊的參數無法正常傳遞。
重要事情說三遍:
類型要比對!!!
類型要比對!!!
類型要比對!!!