現在時刻を常に更新し取得する方法について

1,252 views
Skip to first unread message

soutenmon

unread,
Jul 23, 2011, 1:54:32 AM7/23/11
to 日本Androidの会
SOUTENMONと申します。
長文失礼します。

現在時間取得を利用したバスの待ち時間を表示するアプリケーションを作成しています。
これを作成するに当たって時間をリアルタイムに更新し待ち時間と比べたいのですが、
調べた時間の取得の仕方だとアプリケーションを起動したときの時間しか
持ってくることができなかったのでどのようにしたら常に更新し時間を動かせるか
教えていただけないでしょうか。
自分が作ったプログラムの時間取得する部分を下記に張ります。
これをwhile文でループさせたら表示されなくなりました。
時間が更新されながら比較しながら表示したいので
そのようなプログラムの作成の仕方を教えてください
大変恐縮ですがプログラムをやり始めたばかりなので内容がわからないことがあるかもしれないので
詳しく書いていただけると大変うれしいです



hour24 = calendar.get(Calendar.HOUR_OF_DAY);
// 分の取得
minute = calendar.get(Calendar.MINUTE);
// 秒の取得
second = calendar.get(Calendar.SECOND);
// ミリ秒の取得
millisec = calendar.get(Calendar.MILLISECOND);

// 表示形式1(午前 XX時XX分XX秒)
//String timeFormat1 = am_pm + hour12 + "時" + minute + "分" + second
+ "秒";
// 表示形式2(XX時XX分XX秒XXX)
timeFormat2 = hour24 + "時" + minute + "分" + second + "秒" + millisec;



// 現在時刻をテキストビューへ表示
TextView tv = (TextView) findViewById(R.id.text);
tv.setText("現在時刻" + "表示形式2・・・" + timeFormat2);

3a3k

unread,
Jul 24, 2011, 12:38:43 PM7/24/11
to 日本Androidの会
月曜日が怖い駄猫です。今晩は。
こういう場で書きこむのは初めてですが、珍しく酔った勢いで書いてしまへ。


単に現在時刻を取得して文字列化するなら以下で問題ないと思います。
好きなタイミングで呼んでください。

SimpleDateFormat sdf12 = new SimpleDateFormat("KK時mm分ss秒");
SimpleDateFormat sdf24 = new SimpleDateFormat("HH時mm分ss秒");

long now = System.currenttimemillis();

String timeFormat1 = sdf12.format(now);
String timeFormat2 = sdf24.format(now);


で、常に時間を取得し続けるというのはCPU負荷的にどうなんでしょう。
whileさせたとありましたのでこのように書かれたのかと想像します。


void onTestMethod(){
while(true){
// 取得し続ける的なソース
}
}


当然onTestMethodがリターンしませんので、何時迄経っても動かないかと思われます。
たぶん…


超絶適当に考えると、SOUTENMONさんの目的は一応は果たせると思いますが如何でしょうか

// Activityの中と仮定

private Handler mHandler = new Handler();
//private SimpleDateFormat sdf12 = new SimpleDateFormat("KK時mm分ss秒");
private SimpleDateFormat sdf24 = new SimpleDateFormat("HH時mm分ss秒");
private boolean flag = false;

private void onTestMethod(){
flag = true;
Thread th = new Thread(){

public void run(){
while( flag){ //← 適当なタイミングで誰かが落とす
try {
Thread.sleep(1000); // ← 秒単位で取れればいいのであればとりあえず1秒…
} catch (InterruptedException e) {
e.printStackTrace();
}
long now = System.currenttimemillis();

//String timeFormat1 = sdf12.format(now);
String timeFormat2 = sdf24.format(now);

mHandler.post(new Runnable() {
public void run() {
tv.setText("現在時刻" + "表示形式2・・・" + timeFormat2);
}
});
}
}
};

th.start();
}

public void onPause(){
flag = false;
super.onPause();
}

もちろん上記の書き方は正直あれですが…
とりあえず動けばというのであれば動くと思います。

これをTimerクラスを使用するのか、HandlerのsendMessageDelayedなどを使用するのか、
その他別の何かで実装するのかはクラス設計次第だとも思いますので、興味があれば調べてみてください。

プログラミングを始めたばかりとのことですので、先ずはなにか本を一冊やりきってみては如何でしょうか。

参考
SimpleDateFormat
http://java.sun.com/javase/ja/6/docs/ja/api/java/text/SimpleDateFormat.html

AndroidのHandlerとは何か(adamrockerさんの記事)
http://www.adamrocker.com/blog/261/what-is-the-handler-in-android.html
Reply all
Reply to author
Forward
Message has been deleted
0 new messages