私はソケットベースのAndroidアプリケーションを開発しています。このアプリケーションでは、ボタンのオンかオフかに関係なく、ボタンのステータスを取得する必要があります。だから私が欲しいのは、実行中のスレッドからの更新された結果だけが欲しいということです。つまり、ボタンのステータスが変更された場合は、それに応じてボタンのステータスを設定できることを通知する必要があります。
これが私のメインクラスで、毎秒結果をチェックします。
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("connected");
try {
s = new Socket("192.168.1.19", 502);
i = s.getInputStream();
iD = new DataInputStream(i);
o = s.getOutputStream();
oD = new DataOutputStream(o);
System.out.println("connected");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
Thread cThread = new Thread(new ClientThread());
cThread.start();
}
}, 0,1000);
}
ここで私はTimerTask
毎秒実行するものを使用しました。しかし、タイマータスクを使用したくない。
これがClientThread.javaです
public class ClientThread implements Runnable {
PollThread pollThread;
String byte_to_hex,swapped_result,result;
@Override
public void run()
{
// TODO Auto-generated method stub
try
{
byte[] data1 = new byte[1024], packet1 =
{
(byte) 0x00,(byte) 0x00,(byte) 0x00,
(byte) 0x00,(byte) 0x00,(byte) 0x06,
(byte) 0x01,(byte) 0x01,(byte) 0x00,
(byte) 0x00,(byte) 0x00,(byte) 0x19
};
PollThread.o.write(packet1);
PollThread.i.read(data1, 0, 1024);
/*Log.v("::::TX::::", ConversionMethods.bytesToHex(data1).substring(0, 26));
Log.v("::::RX::::", ConversionMethods.bytesToHex(packet1));*/
byte_to_hex = ConversionMethods.bytesToHex(data1).substring(18, 26);
System.out.println(byte_to_hex);
char[] arr = byte_to_hex.toCharArray();
for (int i = 0; i < arr.length - 1; i += 2)
{
char temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
swapped_result=new String(arr);
result = ConversionMethods.hexStringToNBitBinary(swapped_result, 32);
System.out.println(result);
}
catch (UnknownHostException e) {
// TODO: handle exception
System.out.println("In Catch Block");
e.printStackTrace();
}
catch (IOException e) {
// TODO: handle exception
System.out.println("In Catch Block");
e.printStackTrace();
}
}
}
ここでは、ボタンのステータスが変更されると、異なる結果が得られます。だから私はこの更新されたステータス値が欲しいです。したがって、これに基づいて、いくつかのアクションを実行できます。
ありがとう