Java 传感器数据刷新
因此,我在这里与socket进行了通信(在Client.java中,Override doInBackground,AsyncTask用法) 然而,我创建了一个从主活动到客户端的构造函数,并从onSensorChanged(方位角、滚动和俯仰)拖动信息,如图所示Java 传感器数据刷新,java,android,sockets,client,Java,Android,Sockets,Client,因此,我在这里与socket进行了通信(在Client.java中,Override doInBackground,AsyncTask用法) 然而,我创建了一个从主活动到客户端的构造函数,并从onSensorChanged(方位角、滚动和俯仰)拖动信息,如图所示 public Client(Float a, Float b, Float c) { this.a = a; this.b = b; this.c = c; } 我必须和服务器通信,向他发送来自方位传感器的动
public Client(Float a, Float b, Float c) {
this.a = a;
this.b = b;
this.c = c;
}
我必须和服务器通信,向他发送来自方位传感器的动态结果,为了发送,我有一个“sendData()”函数,用于发送我之前制作的缓冲区。
总之,对于我的使用来说,一切都很好,但有一个问题,构造函数之外的数据不会刷新。所以,当我连接时,我正在和服务器通信,但我发送的是相同的(首先是他读到的)方位角,一次又一次地滚动和俯仰。我尝试了很多方法,但仍然不知道如何从主活动-->onSensorChanged中获取这些信息,该活动已更改为客户端,它将实际刷新并发送动态输出。有什么建议或帮助吗?
谢谢
编辑:
气氛发生了变化
public void onSensorChanged(SensorEvent event) {
Float a = event.values[0];
BigDecimal result1;
result1=round(a,2);
Float b = event.values[2];
if (b <= 5 && b >=-5){
b = (float) 0;
}
b = (float) (b / 3.4);
BigDecimal result2;
result2 = round(b,2);
Float c = event.values[1];
if (c <= 5 && c >=-5){
c = (float) 0;
}
c = (float) (c / 3.4);
BigDecimal result3;
result3 = round(c,2);
Client myClient = new Client(a, b, c);
myClient.execute();
在每个onSensorChange中,您都会创建并启动一个新的异步任务。如果变化不经常发生,这是可以的 在异步任务中,创建一个新的客户端套接字,该套接字连接到te服务器,然后向其发送数据。这也可以。但在那之后,您让该客户机一次又一次地重新发送相同的数据。为什么?因此,异步任务永远不会完成 您启动了许多新的异步任务,但它们永远不会运行。它们将按顺序运行。下一个只有在前一个结束时才开始 因此,在发送数据后关闭客户端,以便doInBackground可以完成异步任务
然后可以运行下一个。Show sendData()代码。并显示完整的客户端类代码。并显示来自MainActivity的所有呼叫。@greenapps还有一些代码,需要更多吗?我明白你想说什么,我只是无法将你的话转换为所需的代码,尝试了一些事情但没有成功。你能更具体地说我该怎么做吗?谢谢
while(socket.isConnected())
。删除while条件,因为您将只执行该代码一次。添加socket.close();。
public void onSensorChanged(SensorEvent event) {
Float a = event.values[0];
BigDecimal result1;
result1=round(a,2);
Float b = event.values[2];
if (b <= 5 && b >=-5){
b = (float) 0;
}
b = (float) (b / 3.4);
BigDecimal result2;
result2 = round(b,2);
Float c = event.values[1];
if (c <= 5 && c >=-5){
c = (float) 0;
}
c = (float) (c / 3.4);
BigDecimal result3;
result3 = round(c,2);
Client myClient = new Client(a, b, c);
myClient.execute();
public byte[] sendData (){
byte[] buff = new byte[68];
byte[] buff1 = intToBytes(1);
byte[] buff2 = intToBytes(20); // ** ROLL
byte[] buff3 = intToBytes(21); // ** PITCH
byte[] buff4 = intToBytes(23); // ** AZIMUT
byte[] buff5 = intToBytes(5);
byte[] buff6 = intToBytes(6);
byte[] buff7 = intToBytes(7);
byte[] buff8 = intToBytes(8);
byte[] buff9 = intToBytes(9);
byte[] buff10 = intToBytes(Math.round(c));
byte[] buff11 = intToBytes(Math.round(b));
byte[] buff12 = intToBytes(Math.round(a));
byte[] buff13 = intToBytes(13);
byte[] buff14 = intToBytes(14);
byte[] buff15 = intToBytes(15);
byte[] buff16 = intToBytes(16);
byte[] buff17 = intToBytes(17);
System.arraycopy(buff1,0,buff,0,buff1.length);
System.arraycopy(buff2,0,buff, 4,buff2.length);
System.arraycopy(buff3,0,buff, 8,buff2.length);
System.arraycopy(buff4,0,buff, 12,buff2.length);
System.arraycopy(buff5,0,buff, 16,buff2.length);
System.arraycopy(buff6,0,buff, 20,buff2.length);
System.arraycopy(buff7,0,buff, 24,buff2.length);
System.arraycopy(buff8,0,buff, 28,buff2.length);
System.arraycopy(buff9,0,buff, 32,buff2.length);
System.arraycopy(buff10,0,buff,36,buff2.length);
System.arraycopy(buff11,0,buff,40,buff2.length);
System.arraycopy(buff12,0,buff,44,buff2.length);
System.arraycopy(buff13,0,buff,48,buff2.length);
System.arraycopy(buff14,0,buff,52,buff2.length);
System.arraycopy(buff15,0,buff,56,buff2.length);
System.arraycopy(buff16,0,buff,60,buff2.length);
System.arraycopy(buff17,0,buff,64,buff2.length);
return buff;}