如何解决“转换字节数组已过时,请改用 SByte 数组”,即使使用 SByte 数组
我从 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 允许您指定数组范围(数组+偏移量+计数),您可以从数组池中租用一个超大的数组并使用它,以避免分配步骤。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。