4

カウントダウンタイマーを実装していますが、うまくいきません。以下はコードです。

package FinalProj.com;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.os.CountDownTimer;

public class iFallApp extends Activity{
    public TextView textView1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //TextView textview = new TextView(this);
        //textview.setText("This is the iFall tab");
       // setContentView()
        setContentView(R.layout.ifallapp);

        textView1=(TextView) findViewById(R.id.textView1);

        MyCount counter = new MyCount(5000,1000);
        counter.start();


    }

    public class MyCount extends CountDownTimer{
        public MyCount(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
            }

        iFallApp app1 = new iFallApp();

        @Override
        public void onFinish() {
            // TODO Auto-generated method stub

            textView1.setText("done");
        }

        @Override
        public void onTick(long millisUntilFinished) {
            // TODO Auto-generated method stub

            textView1.setText((int) (millisUntilFinished/1000));

        }
    }

}
4

3 に答える 3

10

問題を引き起こしているのはこの行です。

textView1.setText((int) (millisUntilFinished/1000));

あなたがしていることは、textView1のリソースIDを設定することですが、あなたが探しているのは次のようなものです。

textView1.setText(Long.toString(millisUntilFinished/1000));

また、行;

        iFallApp app1 = new iFallApp();

かなり疑わしいです。誤って使用してしまう前に備えて取り外してください。すでにAndroidフレームワークによって作成されたiFallAppがあり、this必要に応じて代わりにを使用して渡すことができます。

于 2011-05-07T22:25:48.663 に答える
1

例としてこれに従っているが、Timer を独自のトップレベル クラスに抽象化している他の開発者に注意してください。参照を慎重にクリーンアップしないと、TextView を CountDownTimer インスタンスに渡すとメモリ リークが発生します。これは、画面を 6 回回転させた後に明らかになります。アプリは、私のように OutOfMemoryError でクラッシュします。

このように CountDownTimer にメソッドを追加し、所有する Activity/Fragment の onDestroy()/onDestroyView() が呼び出されるたびに呼び出します。

public void safeCancel() {
   this.textView1 = null;
   super.cancel();
}
于 2013-03-31T22:25:37.837 に答える
0

adb logcat通常、出力を見て何が問題になっているのかを判断できるはずです。

頭のてっぺんから、textView1変数が適切に設定されておらず、nullであると言えます。

onResume()また、関数ではなく関数でカウントダウンタイマーを開始しonCreate()ます。

于 2011-05-07T22:22:10.217 に答える