gpt4 book ai didi

android - android中的计时器不调用函数

转载 作者:行者123 更新时间:2023-11-29 16:05:57 26 4
gpt4 key购买 nike

我使用定时器在特定时间段后调用特定函数。

我用下面的一段代码做到了这一点:

Timer myTimer = new Timer();
myTimer.schedule(new TimerTask() {
public void run() {
Toast.makeText(getApplicationContext(),"Insidedsfdsf Click " , Toast.LENGTH_LONG).show();
UpdateTask();
}
}, 1, 1000);




public void UpdateTask() {
// TODO Auto-generated method stub
try
{


Toast.makeText(getApplicationContext(),"update " , Toast.LENGTH_LONG).show();



Intent intent = getIntent();

String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
String id = intent.getStringExtra(MainActivity.EXTRA_ID);
String[] lst = null;
String[] lstNew = null;
ListView lm=(ListView)findViewById(R.id.listView1);
TextView tv = (TextView)findViewById(R.id.textView1);
TextView tvNewMessages = (TextView)findViewById(R.id.tvNewMessages);

tv.setText("Welcome " + message);



CallSoap cs=new CallSoap();



lst=cs.GetMessage(id);

lstNew=cs.GetNewMessage(id);



final int numOfMessages=lstNew.length;

//Toast.makeText(getApplicationContext(),"Call "+lstNew.length , Toast.LENGTH_LONG).show();





tvNewMessages.setText("You have "+ numOfMessages +" new messages");

ArrayAdapter<String> adpt = new ArrayAdapter<String>(Messages.this, android.R.layout.simple_list_item_1,lst){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);

if(position<numOfMessages){
v.setBackgroundColor(Color.RED);
}
else
{
v.setBackgroundColor(Color.WHITE);
}
return v;
}
};

lm.setAdapter(adpt);

}
catch(Exception ex)
{
ex.printStackTrace();
//Toast.makeText(getApplicationContext(),"Call "+ex.getMessage() , Toast.LENGTH_LONG).show();
}
}

但我发现我的 UpdateTask 函数没有被调用,并且在 logcat 中显示错误:

can't create handler inside thread

请帮帮我。

最佳答案

计时器任务在不同的线程上运行。应在 ui 线程上更新 ui。

因此您可以使用Handler。或者使用 runOnUiThread

Handler m_handler;
Runnable m_handlerTask ;
m_handler = new Handler();
m_handlerTask = new Runnable()
{
@Override
public void run() {

// do something
m_handler.postDelayed(m_handlerTask, 1000);

}
};
m_handlerTask.run();

同时检查这个作为旁注

Android Thread for a timer

编辑:

您每次都在初始化 View 。将其移动到 onCreate 并将它们声明为类成员

  ListView lm=(ListView)findViewById(R.id.listView1);
TextView tv = (TextView)findViewById(R.id.textView1);
TextView tvNewMessages = (TextView)findViewById(R.id.tvNewMessages);

关于android - android中的计时器不调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18464460/

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