Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用计时器时出错-Android_Java_Android_Timer_Runtime - Fatal编程技术网

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
}