2012-05-15 42 views
1

我有一個應用程序,告訴我在學校需要多少小時(:P)。我有一個textview文本時間:(小時去)。這應該是6.2,但現在是6,然後當我點擊開始時,它說學校立即完成,然後崩潰。哦,我想以幾小時的時間顯示時間,就像這樣(6.2 = 6小時20分鐘)。 可能是什麼問題?Android倒數計時器崩潰和錯誤的值

代碼startActivity:

package com.nieeli.timer; 

import android.app.Activity; 

import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class startActivity extends Activity implements OnClickListener { 
    private static final String tag = "Main"; 
    private MalibuCountDownTimer countDownTimer; 
    private long timeElapsed; 
    private boolean timerHasStarted = false; 
    private Button startB; 
    private TextView text; 
    private TextView timeElapsedView; 

    private final long startTime = 22500000/3600000; 
    private final long interval = 1/100; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     startB = (Button) this.findViewById(R.id.button); 
     startB.setOnClickListener(this); 

     text = (TextView) this.findViewById(R.id.timer); 
     timeElapsedView = (TextView) this.findViewById(R.id.timeElapsed); 
     countDownTimer = new MalibuCountDownTimer(startTime, interval); 
     text.setText(text.getText() + String.valueOf(startTime)); 
    } 

    public void onClick(View v) { 
     if (!timerHasStarted) { 
      countDownTimer.start(); 
      timerHasStarted = true; 
      startB.setText("Start"); 
     } else { 

      countDownTimer.cancel(); 
      timerHasStarted = false; 
      startB.setText("Stop and Reset"); 
     } 
    } 

    // CountDownTimer class 
    public class MalibuCountDownTimer extends CountDownTimer { 

     public MalibuCountDownTimer(long startTime, long interval) { 
      super(startTime, interval); 
     } 

     @Override 
     public void onFinish() { 
      text.setText("School Finished!"); 
      timeElapsedView.setText("Time Passed: " 
        + String.valueOf(startTime)); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      text.setText("Time remain:" + millisUntilFinished); 
      timeElapsed = startTime - millisUntilFinished; 
      timeElapsedView.setText("Time Left: " 
        + String.valueOf(timeElapsed)); 
     } 
    } 
} 

未作艙單或佈局的任何變化。

感謝:D

+2

張貼您的logcat –

+0

你有嘗試後評論timeElapsedView.setText(「時間流逝:」 + String.valueOf(startTime)); 行? –

+0

我找不到有關我的應用的任何logcat消息,它們都來自系統o.o – Niell

回答

3

首先,記住long是一個整數類型。 私人最終長時間間隔= 1/100; 不等於0.01;我相信它會成爲零。此外,這是你希望你的onTick被調用的頻率;我相信你試圖說你想每0.01毫秒被調用一次,這似乎過分了。也許你的意思是每100毫秒(十次一秒)?

你也可能要交換的startB.setText線,使停止時顯示「開始」,在啓動時顯示「停止」

你想毫秒轉換爲小時和分鐘?你可以試試這樣: long totalMinutes = millis/1000/60; 長時間=毫秒/ 60; long minutes = totalMinutes - (hours * 60);

編輯: 如果您希望您的倒數數字(6.2代表6小時20分鐘)每10分鐘減少0.1,有兩種主要方法。

第一個選項是將「間隔」設置爲10 * 60 * 1000(10分鐘內的毫秒數)。然後在onTick中,取一個浮點數(10.0或者其他)並減少0.1。這可能是一個快速和骯髒的方法,如果它甚至可以工作,但它並不理想。

第二個是做我上面描述的。然後當你有小時數和分鐘數時: float timeRemaining =(float)hours +(float)minutes/100 使用String.format在textview中顯示它。像 String.format(「%。1f%n」,timeRemaining) 只顯示一個小數點。

我實際上並沒有嘗試過這些代碼 - 但是從我的頭頂開始,這應該會給你一些技巧來引導你朝着正確的方向前進。