Java 使用计时器时出错-Android
我使用的计时器示例如下所示: 但在执行这一行时,我遇到了运行时错误(我已经对调试的所有其他行进行了注释):Java 使用计时器时出错-Android,java,android,timer,runtime,Java,Android,Timer,Runtime,我使用的计时器示例如下所示: 但在执行这一行时,我遇到了运行时错误(我已经对调试的所有其他行进行了注释): intensityTextView.setText(String.valueOf(_intensity)) 我知道我需要以某种方式传递UI,但不知道如何传递 这是密码 package hanan.smartlight; 导入android.os.AsyncTask; 导入android.support.v7.app.ActionBarActivity; 导入android.os.Bund
intensityTextView.setText(String.valueOf(_intensity))代码>
我知道我需要以某种方式传递UI,但不知道如何传递
这是密码
package hanan.smartlight;
导入android.os.AsyncTask;
导入android.support.v7.app.ActionBarActivity;
导入android.os.Bundle;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.SeekBar;
导入android.widget.Switch;
导入android.widget.TextView;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
导入java.io.BufferedReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.util.Timer;
导入java.util.TimerTask;
公共类Main扩展了ActionBarActivity{
//私人SeekBar强度SeekBar;
私有整数_强度=0;
私有字符串_ServerResponse=“”;
私有布尔led_状态=false;
专用int repeatTimeMs=1000;
private int delayStartingTimeMs=5000;//默认为5秒,可以稍后更改
文本视图强度文本视图;
SeekBar强度SeekBar;
开关LED开关;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intensityTextView=(TextView)findViewById(R.id.intensityValue);
强度SeekBar=(SeekBar)findViewById(R.id.intensitySeekBar);
LED开关=(开关)findViewById(R.id.LED开关);
定时器=新定时器();
timer.scheduleAtFixedRate(新TimerTask()
{
公开募捐
{
setControl();//显示数据
}
},delayStartingTimeMs,repeatTimeMs);
//定时器=新定时器();
//MyTimerTask MyTimerTask=新MyTimerTask();
//时间表(myTimerTask、delayStartingTimeMs、repeatTimeMs);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
public void syncwith服务器(){
}
公共控制{
字符串url=”http://smartlight.gear.host/getControlsFromDB.php“;//服务器的url
new UploadToServer().execute(url);//发送请求
int=0;
int=0;
字符串s1=“”;
字符串s2=“”;
如果(_ServerResponse.length()>3){
试一试{
s1=_ServerResponse.substring(3,6);
}捕获(例外e){
返回;
}
试一试{
s2=_ServerResponse.substring(9,_ServerResponse.length()-2);
}捕获(例外e){
返回;
}
试一试{
LED=Integer.parseInt(s1);
}捕获(数字格式){
返回;
}
试一试{
int=Integer.parseInt(s2);
}捕获(数字格式){
返回;
}
如果(发光二极管==255)
led_状态=真;
else if(发光二极管==254)
led_状态=错误;
如果(intS>=0&&intS在textview上使用post()方法。Runnable将在用户界面线程上运行。这是如何在TimerTask的run方法中更新textview的示例
public class MainActivity extends ActionBarActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
textView.post(new Runnable() {
@Override
public void run() {
textView.setText("Arun");
}
});
}
}, 3000, 3000);
}
}
在您的情况下,您可以添加
intensityTextView.post(new Runnable() {
@Override
public void run() {
intensityTextView.setText(String.valueOf(_intensity));
}
});
mHandler必须在主线程中!粘贴带有错误的日志
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
mHandler.obtainMessage(1).sendToTarget();
}
}, delayStartingTimeMs, repeatTimeMs);
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
setControl(); //this is where textView gets Updated
}