gpt4 book ai didi

android - 简单的 Android 二进制文本时钟

转载 作者:搜寻专家 更新时间:2023-11-01 07:41:08 26 4
gpt4 key购买 nike

我想创建一个简单的 android 二进制时钟,但我的应用程序崩溃了。我使用 6 个 TextView 字段:3 个用于十进制,3 个用于当前时间的二进制表示 (HH:mm:ss)。这是代码:

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Binary extends Activity implements Runnable
{
Thread runner;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

if (runner == null)
{ //start the song
runner = new Thread(this);
runner.start();
}
}

@Override
public void run()
{
TextView hours_dec = (TextView) findViewById(R.id.hours_dec);
TextView mins_dec = (TextView) findViewById(R.id.mins_dec);
TextView secs_dec = (TextView) findViewById(R.id.secs_dec);
TextView hours_bin = (TextView) findViewById(R.id.hours_bin);
TextView mins_bin = (TextView) findViewById(R.id.mins_bin);
TextView secs_bin = (TextView) findViewById(R.id.secs_bin);

SimpleDateFormat hours_sdf = new SimpleDateFormat("HH");
SimpleDateFormat mins_sdf = new SimpleDateFormat("mm");
SimpleDateFormat secs_sdf = new SimpleDateFormat("ss");

Calendar cal = Calendar.getInstance();

while (runner != null)
{
WaitAMoment();
cal.getTime();

hours_dec.setText(hours_sdf.format(cal.getTime()));
mins_dec.setText(mins_sdf.format(cal.getTime()));
secs_dec.setText(secs_sdf.format(cal.getTime()));

hours_bin.setText(String.valueOf(Integer.toBinaryString(Integer.parseInt((String) hours_dec.getText()))));
mins_bin.setText(String.valueOf(Integer.toBinaryString(Integer.parseInt((String) mins_dec.getText()))));
secs_bin.setText(String.valueOf(Integer.toBinaryString(Integer.parseInt((String) secs_dec.getText()))));
}

}

protected void WaitAMoment()
{
try
{
Thread.sleep(100);
} catch (InterruptedException e) { };
}
}`

最佳答案

您正在尝试从另一个线程中更新您的 View 组件。您需要将组件更新分离到一个 Runnable 对象中,并使用从第二个线程调用的处理程序。

更多信息:https://developer.android.com/guide/appendix/faq/commontasks.html#threading

奖金代码:

package stackoverflow.test.binaryclock;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.widget.TextView;

public class BinaryClock extends Activity implements Runnable
{
Date currentTime;
Thread runner;
final Runnable updater = new Runnable(){
public void run(){
updateClockValues();
};
};
final Handler mHandler = new Handler();
TextView hours_dec;
TextView mins_dec;
TextView secs_dec;
TextView hours_bin;
TextView mins_bin;
TextView secs_bin;

SimpleDateFormat hours_sdf = new SimpleDateFormat("HH");
SimpleDateFormat mins_sdf = new SimpleDateFormat("mm");
SimpleDateFormat secs_sdf = new SimpleDateFormat("ss");

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
currentTime = Calendar.getInstance().getTime();
hours_dec = (TextView) findViewById(R.id.hours_dec);
mins_dec = (TextView) findViewById(R.id.mins_dec);
secs_dec = (TextView) findViewById(R.id.secs_dec);
hours_bin = (TextView) findViewById(R.id.hours_bin);
mins_bin = (TextView) findViewById(R.id.mins_bin);
secs_bin = (TextView) findViewById(R.id.secs_bin);
if (runner == null)
{ //start the song
runner = new Thread(this);
runner.start();
}
}

private void updateClockValues() {
currentTime = Calendar.getInstance().getTime();
hours_dec.setText(hours_sdf.format(currentTime.getTime()));
mins_dec.setText(mins_sdf.format(currentTime.getTime()));
secs_dec.setText(secs_sdf.format(currentTime.getTime()));

hours_bin.setText(String.valueOf(Integer.toBinaryString(Integer.parseInt((String) hours_dec.getText()))));
mins_bin.setText(String.valueOf(Integer.toBinaryString(Integer.parseInt((String) mins_dec.getText()))));
secs_bin.setText(String.valueOf(Integer.toBinaryString(Integer.parseInt((String) secs_dec.getText()))));
}
@Override
public void run()
{
while (runner != null)
{
try
{
Thread.sleep(1000);
Log.i("Tick", "Tock");
} catch (InterruptedException e) { };
mHandler.post(updater);
}
}
}

关于android - 简单的 Android 二进制文本时钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com