0

我开发了一个从服务器提取单行文本消息的 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.

4

2 回答 2

1

使用 aa 处理程序

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 ); 

笔记:

从服务器获取下一条消息

从服务器获取消息应该在后台线程上完成。

编辑:

虽然复制粘贴初始化部分丢失。您有一个计数器 i 显示在 textview 中。计数器每秒增加 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();  
   }
   }  
于 2013-07-11T03:59:50.303 回答
0

使用计时器。为重复的间隔执行安排计时器,每次执行后,您可以从服务器获取下一个文本并显示相同的内容。

查看Timer参考scheduleAtFixedRate(TimerTask task, long delay, long period)

于 2013-07-11T04:04:36.823 回答