我的应用程序是问题/答案应用程序,用户询问问题,然后服务器向用户发送问题,当用户收到问题时,会出现一个ShowQuestion按钮,当用户点击它时,我想启动计时器,因为用户必须在36秒内回答 我在我的xml中构建了一个像这样的
的textView<TextView
android:id="@+id/tvRemaingTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
/>
在我的Java活动中我做了这个
TextView remaingTimer;
CountDownTimer timer;
private void initialize() {
remaingTimer=(TextView)findViewById(R.id.tvRemaingTime);
}
当用户点击ShowQuestion时,我就这样做
timer =new CountDownTimer(360000,100) {
public void onTick(long millisUntilFinished) {
remaingTimer.setText(millisUntilFinished+"");
}
public void onFinish() {
remaingTimer.setText("finish");
}
};
timer.start();
但它没有打印任何东西,我做错了什么?
我正在使用AsyncTask从服务器那里得到问题:
public class getQuestionFromServer extends
AsyncTask<String, Integer, String[]> {}
但我不会对textView产生影响,因为ShowQuestion按钮不会出现,否则用户从服务器上得到了一个问题
答案 0 :(得分:1)
您可以使用runOnUiThread从Thread更新TextView:
TextView remaingTimer;
CountDownTimer timer;
private boolean mClockRunning=false;
private int millisUntilFinished=36;
private void initialize() {
remaingTimer=(TextView)findViewById(R.id.tvRemaingTime);
}
ShowQuestionbutn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(mClockRunning==false)
{
mClockRunning=true;
millisUntilFinished=0;
myThread();
}
public void myThread(){
Thread th=new Thread(){
@Override
public void run(){
try
{
while(mClockRunning)
{
Thread.sleep(100L);// set time here for refresh time in textview
CountDownTimerActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(mClockRunning)
{
if(millisUntilFinished<0)
{
mClockRunning=false;
millisUntilFinished=36;
}
else
{
millisUntilFinished--;
remaingTimer.setText(millisUntilFinished+"");//update textview here
}
}
};
}
}catch (InterruptedException e) {
// TODO: handle exception
}
}
};
th.start();
}