我开发了一个Android应用程序,它从服务器中提取单行文本消息。单击一个按钮后,它会进行一次函数调用,从服务器获取下一条消息。其中一些消息是基于时间的,
即那些消息必须在TextView
中显示特定的时间,并且在该时间过去之后,它应该自动进行函数调用以从服务器获取下一条消息(即没有按钮)被点击)。
有人可以帮助我实现这一目标。
我尝试使用while循环如下:
while(!presentTime.equals(expiryTime)){
calculatePresentTym(); //This method calculates the presentTime value
display.settext(the received instruction);
}
if(presentTime.equals(expiryTime))
(make the function call)
如果我这样做,在presentTime
和expiryTime
相等之前不会显示任何内容。一旦它们相等,函数调用将自动获取下一条指令并显示在TextView.
答案 0 :(得分:1)
使用处理程序
Handler m_handler;
Runnable m_handlerTask ;
m_handler = new Handler();
@Override
public void run() {
// do something
m_handler.postDelayed(m_handlerTask, 1000);
}
};
m_handlerTask.run();
T0取消运行
m_handler.removeCallbacks(m_handlerTask); // to cancel the run
您也可以使用计时器,但由于计时器在不同的线程上运行,您必须使用runOnUiThread
来更新ui。
Timer _t = new Timer();
_t.scheduleAtFixedRate( new TimerTask() {
@Override
public void run() {
//do something
runOnUiThread(new Runnable() //run on ui thread
{
public void run()
{
//update ui
}
});
}
}, 1000, 1000 );
注意:
从服务器获取下一条消息
从服务器获取消息应该在后台线程上完成。
编辑:
虽然缺少复制粘贴初始化部分。您有一个显示在textview中的计数器i。计数器每秒增加1。当它达到100时,你取消运行。根据您的要求修改以下内容。
public class MainActivity extends Activity {
TextView tv;
Handler m_handler;
Runnable m_handlerTask ;
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.textView1);
m_handler = new Handler();
m_handlerTask = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(i<=100)
{
tv.setText(""+i);
i++;
}
else
{
m_handler.removeCallbacks(m_handlerTask);
}
m_handler.postDelayed(m_handlerTask, 1000);
}
};
m_handlerTask.run();
}
}
答案 1 :(得分:0)
使用计时器。为重复的间隔执行安排计时器,每次执行后,您可以从服务器获取下一个文本并显示相同的文本。
检查定时器参考scheduleAtFixedRate(TimerTask task, long delay, long period)