"Converting Byte array is obsolete, use SByte array instead" 即使使用 SByte 数组
"Converting Byte array is obsolete, use SByte array instead" even when using SByte array
我正在从 Unity C# 调用此 Java 方法。即使我发送的是 byte[] 而不是 byte[],我还是收到一个错误提示。有什么想法吗?
Java方法:
public void sendBytes(byte[] bytes) {
if (_connectionThread != null) {
Log.i(LOG_TAG, "Sending " + bytes.length + " byte(s).");
_connectionThread.sendBytes(bytes);
} else {
Log.i(LOG_TAG, "Unable to send bytes because the connection thread is not initialized.");
}
}
C#:
public void SendBytes(byte[] bytes)
{
sbyte[] signedBytes = (sbyte[])(Array)bytes;
_bluetoothClient.Call("sendBytes", signedBytes);
}
2021-04-18 19:33:14.024 4733-4796/com.company.product W/Unity: AndroidJNIHelper: converting Byte array is obsolete, use SByte array instead
UnityEngine.StackTraceUtility:ExtractStackTrace () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/StackTrace.cs:37)
UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
UnityEngine.Logger:Log (UnityEngine.LogType,object)
UnityEngine.Debug:LogWarning (object)
UnityEngine._AndroidJNIHelper:ConvertToJNIArray (System.Array) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:1208)
UnityEngine._AndroidJNIHelper:CreateJNIArgArray (object[]) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:1027)
UnityEngine.AndroidJNIHelper:CreateJNIArgArray (object[]) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJNI.bindings.cs:112)
UnityEngine.AndroidJavaObject:_Call (string,object[]) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:410)
UnityEngine.AndroidJavaObject:Call<sbyte> (string,sbyte[]) (at
可能是通过.GetType()
和Type.GetElementType()
使用反射来检查数组类型。您的强制转换(老实说:我很惊讶竟然能起作用,但是:数组方差很复杂)不会改变数组类型。
您可以尝试分配一个新数组(实际上是一个 sbyte[]
),将数据复制过来,看看是否可行。但这显然效率较低。如果 API 允许您指定一个数组范围(数组+偏移量+计数),您可以从数组池中租用一个超大数组并使用它,以避免分配步骤。
我正在从 Unity C# 调用此 Java 方法。即使我发送的是 byte[] 而不是 byte[],我还是收到一个错误提示。有什么想法吗?
Java方法:
public void sendBytes(byte[] bytes) {
if (_connectionThread != null) {
Log.i(LOG_TAG, "Sending " + bytes.length + " byte(s).");
_connectionThread.sendBytes(bytes);
} else {
Log.i(LOG_TAG, "Unable to send bytes because the connection thread is not initialized.");
}
}
C#:
public void SendBytes(byte[] bytes)
{
sbyte[] signedBytes = (sbyte[])(Array)bytes;
_bluetoothClient.Call("sendBytes", signedBytes);
}
2021-04-18 19:33:14.024 4733-4796/com.company.product W/Unity: AndroidJNIHelper: converting Byte array is obsolete, use SByte array instead
UnityEngine.StackTraceUtility:ExtractStackTrace () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/StackTrace.cs:37)
UnityEngine.DebugLogHandler:LogFormat (UnityEngine.LogType,UnityEngine.Object,string,object[])
UnityEngine.Logger:Log (UnityEngine.LogType,object)
UnityEngine.Debug:LogWarning (object)
UnityEngine._AndroidJNIHelper:ConvertToJNIArray (System.Array) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:1208)
UnityEngine._AndroidJNIHelper:CreateJNIArgArray (object[]) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:1027)
UnityEngine.AndroidJNIHelper:CreateJNIArgArray (object[]) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJNI.bindings.cs:112)
UnityEngine.AndroidJavaObject:_Call (string,object[]) (at /Users/bokken/buildslave/unity/build/Modules/AndroidJNI/AndroidJava.cs:410)
UnityEngine.AndroidJavaObject:Call<sbyte> (string,sbyte[]) (at
可能是通过.GetType()
和Type.GetElementType()
使用反射来检查数组类型。您的强制转换(老实说:我很惊讶竟然能起作用,但是:数组方差很复杂)不会改变数组类型。
您可以尝试分配一个新数组(实际上是一个 sbyte[]
),将数据复制过来,看看是否可行。但这显然效率较低。如果 API 允许您指定一个数组范围(数组+偏移量+计数),您可以从数组池中租用一个超大数组并使用它,以避免分配步骤。