-1

こんにちは、私のアプリには 8 つのボタンがあります。各ボタンがクリックされると、onclickListener() が設定され、文字列がソケットに書き込まれます。ボタンを押したままにすると、文字列をループで書き込む必要があります。これが私がやろうとしていることです。

bLeft.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View arg0, MotionEvent event) {
            // TODO Auto-generated method stub
            MyThread start = new MyThread();
             boolean isReleased = event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL;
             boolean isPressed = event.getAction() == MotionEvent.ACTION_DOWN;

        while (isPressed) {

                start.execute(ip, "left");

                break;
        }
            return false;
        }
    });

どういうわけか、なぜそれが機能していないのかわかりません。start,execute(string, string) は、AsyncTask クラスのスレッドを実行して、ソケットと出力ストリームを作成します。

4

2 に答える 2

0
bLeft.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View arg0, MotionEvent event) {
        // TODO Auto-generated method stub
        MyThread start = new MyThread();
         boolean isReleased = event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL;
         boolean isPressed = event.getAction() == MotionEvent.ACTION_DOWN;

    while (isPressed) {

            start.execute(ip, "left");

            break;
    }
        return false;
    }
});

まず、 isReleased は使用されないため、その変数を削除すると、事態がより複雑になります。

数秒後、たとえば while ループで終わることを確認します。

`Log.d("debugText", "しばらくお待ちください")'

また、プレス状態をログに記録します。これにより、デバッグ中に物事がより明確になります。

Android の次のドキュメントも参照してください。適切なものを使用していることを確認してください。

デバッグ後、おそらく実行されていない理由がわかるでしょう。そうでない場合は、さらに情報が必要です。

于 2012-06-04T21:33:45.267 に答える
0

asyncronos タスクは 1 回しか実行できません... while ループで使用しようとしています...つまり、繰り返し使用しようとしています... while ループの反復ごとに開始を再初期化する必要があります。 ..

 while (ispressed){
      start = new YourAsyncTask();
      start.execute(params);
 }
于 2014-10-19T03:24:11.593 に答える