0

私はソケットベースの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();
        }
    }
}

ここでは、ボタンのステータスが変更されると、異なる結果が得られます。だから私はこの更新されたステータス値が欲しいです。したがって、これに基づいて、いくつかのアクションを実行できます。

ありがとう

4

1 に答える 1

0

ボタンを初期化するときに、ボタンをスレッドに渡します。そして、あなたはあなたのスレッドから状態にアクセスすることができます。

 myTimer = new Timer();
        myTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                Thread cThread = new Thread(new ClientThread(myButton));
                    cThread.start();
                }
    }, 0,1000);



public class ClientThread implements Runnable {

    PollThread pollThread;
    String byte_to_hex,swapped_result,result;

public ClientThread(Button btn){
this.button = btn
}

@Override
public void run() 
{

...。

于 2013-01-23T06:39:04.613 に答える