我正在开发基于Samsung Chord SDK的应用程序。我需要在sendDataToAll()中发送视频的当前位置,该位置接受byte [] []中的数据。我的问题是,当我尝试将当前位置(这是一个int)发送到字节时,我得到了返回的负值(字节)。当我尝试在OnDataRecived()中将负值转换为int时,它仍然是相同的负值。我该如何解决这个问题?
Sending code:
//for sending the message
int currPos = mVideoView.getCurrentPosition();
logView.append("Duration sent= " + currPos);
//Integer resume = -3;
Byte msgByte = new Byte("-3");
byte [] [] pay = new byte [1] [2];
pay[0] [0] = msgByte;
Byte msgByte2 = new Byte((byte) currPos);
logView.append("Duration sent= " + msgByte2);
pay[0] [1] = msgByte2;
mChordchannel.sendDataToAll("Integer", pay);
// im sending -3 so that im checking that the user pressed the resume .
Receiving code:
//on receiving
else if(intRec == -3) {
Byte pos = rec[0] [1];
int posn;
posn = pos.intValue();
logView.append("Duration received= " + posn);
mVideoView.seekTo(posn);
mVideoView.start();
}
答案 0 :(得分:1)
我对Samsung Chord SDK一无所知,但你不能在一个字节中适合(大多数)整数。 int 4 字节宽。
要创建与当前代码兼容的有效负载,它将发送所有4个字节:
byte[][] payload = { {
-3,
(byte)(currPos >> 24),
(byte)(currPos >> 16),
(byte)(currPos >> 8),
(byte)(currPos >> 0),
} };
mChordchannel.sendDataToAll("Integer", payload);
收到:
int position = new java.math.BigInteger(
Arrays.copyOfRange(rec[0], 1, 5)).intValue();
P.S。这不是漂亮的代码!对于基本的int是可以忍受的,但是如果你以后发现需要传输更复杂的数据结构,那么你需要一种更好的方法。一些想法,按复杂程度递增:
toByteArray()
以获取有效负载。)getBytes("UTF-8")
并发送。)