0

私はこのコードにいます。オブジェクトのattaylistを循環し、各オブジェクトにコールバックを割り当てていますが、CountDownTimerを使用すると、Looper.prepare()を呼び出さないスレッド内にハンドラーを作成できませんでクラッシュします。

    for ( final ABoxActor a : actList )
    {

        ActorDamageListener adl = new ActorDamageListener(){
            public void ActorDestroyCallback() {
                Log.e("KILLED", a.getBitmapName() );
            }

            public void ActorDamageCallback(float damage) {
                Log.e("DAMAGED "+String.valueOf(damage), a.getBitmapName() );
                a.setSpriteCurrentFrame(10);

                //// THROWS Can't create handler inside thread that has not called Looper.prepare()
                CountDownTimer t = new CountDownTimer(500,500){
                    @Override
                    public void onFinish() {
                        a.setSpriteCurrentFrame(15);
                    }
                    @Override
                    public void onTick(long millisUntilFinished) {
                    }}.start();
                /////////////////////////////////       

            }
        };

        a.setListener(adl); 
    }

それを修正する最も簡単な方法は何ですか?どういうわけか、この「ルーパー」をコールバック定義に追加できますか?

ありがとう!

4

1 に答える 1

3

あなたはおそらくあなた自身のスレッドでこのコードを呼んでいます。ハンドラーがUIスレッドにコールバックできるようにするには、各theadにルーパーをアタッチする必要があります。したがって、Looper.prepare()を呼び出してルーパーをセットアップし、ハンドラーがUIスレッドにコールバックできるようにする必要があります。

于 2012-06-11T18:50:35.773 に答える