3

アプリケーションでカウントダウン タイマーを使用しています。次の日付を日、時間、分、秒で表示する必要があります。日、時間、分、秒を取得しましたが、テキスト ビューに設定するとカウントダウンが開始されません。以下私のコードです。

Date date = new Date(2013,Integer.parseInt(datess.get(k).split("-")[1])-1,Integer.parseInt(datess.get(k).split("-")[0]),hours,mins,secs);  
     long dtMili = System.currentTimeMillis();  
     Date dateNow = new Date(dtMili);  
      remain = date.getTime() - dateNow.getTime();


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

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



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

        tv3.setText("done");
    }

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


        tv3.setText(timeCalculate(millisUntilFinished/1000) + " Countdown");

    }
}

 public String timeCalculate(long ttime)   
   {  
     long  daysuuu,hoursuuu, minutesuuu, secondsuuu;  
     String daysT = "", restT = "";  



     daysuuu = (Math.round(ttime) / 86400);  
     hoursuuu = (Math.round(ttime) / 3600) - (daysuuu * 24);  
     minutesuuu = (Math.round(ttime) / 60) - (daysuuu * 1440) - (hoursuuu * 60);  
     secondsuuu = Math.round(ttime) % 60;  


     if(daysuuu==1) daysT = String.format("%d day ", daysuuu);  
     if(daysuuu>1) daysT = String.format("%d days ", daysuuu);  

     restT = String.format("%02d:%02d:%02d", hoursuuu, minutesuuu, secondsuuu);  

     return daysT + restT;  
   }  

これが出力です

ここに画像の説明を入力

カウントダウンが開始されないのはなぜですか? 任意の提案をいただければ幸いです。

4

4 に答える 4

6

millisUntilFinishedパラメータを使用して の時間を更新していませんtimeCalculate()。皮切りに:

@Override
public void onTick(long millisUntilFinished) {
    tv3.setText(millisUntilFinished + " Countdown");
}

タイマーが機能していることを確認したらmillisUntilFinished、人間が読める文字列に変換するメソッドが必要になります。

Java の日付と時刻に関連するクラスは、操作が不必要に難しく、あいまいなエラーがいくつかあります。(たとえば、Date クラスの多くは非推奨ですが、推奨される Calendar クラスは依然として Date に大きく依存しています...) サードパーティのライブラリであるJoda Timeは、人気のある代替品です。


添加

出力は私が期待したものではありません

25,000 日から 700 日後というのは、私が期待するものでもなく、date間違っているようです。gabriel がこの質問に対する別の回答で指摘しているように、年の値は 1900 年から計算されます。25,000 日は将来 70 年未満であるため、まだ何かが間違っています...
ただし、このコンストラクターは非推奨であり、使用しないでください。おすすめのクラスはカレンダーです。カレンダーを使用し た簡単なデモを作成しました。

ただし、CountDownTimer 自体にはいくつかの根本的な欠陥があることを理解してください。

  • CDT が呼び出されるたびonTick()に全体の時間が数ミリ秒追加されますが、毎日 7 分半簡単に追加できることに気付きました。
  • 最初のエラーが原因で、最後のエラーonTick()が呼び出されない場合があります。5からカウントダウンするとき、私は通常、次のよう"5, 4, 3, 2, <long pause>"onFinished()表示されます"0"...

以前の質問で CDT を書き直しました: android CountDownTimer - additional milliseconds delay between ticks

于 2012-12-12T06:39:44.233 に答える
2

問題は、Date()を適切に使用していないことです。

java.util.Date.Date(int年、int月、int日、int時間、int分、int秒)のパラメーターは、最初のパラメーターで0を使用して1900年を示します。

あなたが書いたコードは、ほぼ2000年先の日付を計算し、次に現在の時刻を差し引くため、非常に長いカウントダウンになります;-)。

1行を次のように変更すると、アプリは機能するはずです

Date date = new Date(2013-1900,Integer.parseInt(datess.get(k).split("-")[1])-1,Integer.parseInt(datess.get(k).split("-")[0]),hours,mins,secs);  
于 2012-12-15T15:32:39.970 に答える
1

親愛なる使用Chronometer

int seconds;

    chronometer.setOnChronometerTickListener(new OnChronometerTickListener() 
                    {   
                        public void onChronometerTick(Chronometer chronometer) 
                        {
                            seconds = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000);
                            String strTime = (seconds / 60) + ":" + (seconds % 60);
                            lblTime.setText(strTime);
                        }
                    });
                    chronometer.setBase(SystemClock.elapsedRealtime());
                    chronometer.start

その後、作業しながら試してください。希望の曜日と時間を取得します。

于 2012-12-18T13:46:33.583 に答える
0

このコードを試してください

CountDownTimer countDown = new CountDownTimer(3000,1000) {

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

        }

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

        }
    };
    countDown.start();
于 2012-12-12T06:26:16.640 に答える