这是我的第一个应用程序之一,我不知道自己该做什么。
package com.example.stopuhr;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public int hs, sek, min;
public boolean running = false;
public String mode = "gestoppt";
public void setLabelText(){
TextView textView1 = (TextView)findViewById(R.id.textView1);
String ht = "";
String st = "";
String mt = "";
if (hs<10){
ht = "0" + hs;
}else{
ht = String.valueOf(hs);
}
if (sek<10){
st = "0" + sek;
}else{
st = String.valueOf(sek);
}
if (min<10){
mt = "0" + min;
}else{
mt = String.valueOf(min);
}
textView1.setText(mt + " : " + st + " : " + ht);
}
public void onClickStart (View view){
Thread timer = new Thread(){
这是第一个错误 此行有多个标记 - 语法错误,插入“}”以完成ClassBody - 语法错误,插入“;”完成ConstructorDeclaration - 语法错误,插入“;”完成BlockStatements - 缺少方法的返回类型 - 语法错误,插入“)”以完成ConstructorDeclaration
runOnUiThread(new Runnable() {
public void run(){
if (mode.equals("gestoppt")){
running = true;
mode = "läuft";
while (running){
try{Thread.sleep(9);}
catch(Exception e){}
if(hs<=99){
hs++;
}else{
hs = 0;
if(sek<=59){
sek++;
}else{
sek = 0;
}
if(min<=99){
min++;
}else{
min = 0;
}
}
}
setLabelText();
}
}
这是第二个错误: 令牌“}”上的语法错误,期望MethodHeaderName 我不知道我该怎么处理这个错误。
});
};
timer.start();
}
public void onClickStop (View view){
if (mode.equals("läuft"));
running = false;
mode = "gestoppt";
}
public void onClickReset (View view){
if(mode.equals("gestoppt")){
hs = 0;
sek = 0;
min = 0;
setLabelText();
}
}
}
感谢您的帮助。
答案 0 :(得分:2)
在您的代码中,您有:
public void onClickStart (View view){
Thread timer = new Thread(){
runOnUiThread(new Runnable() {
public void run() {
...
}
});
};
}
这里的问题是你在一个类中有一个调用runOnUiThread
- 而不是在一个方法中。通常,您似乎与线程,runnable和runOnUi混淆。如果您想要在UI线程上调用其run
方法,则无需启动新线程。您在UI线程上唯一需要做的就是更新标签文本。如果不通过逻辑,修复语法错误的一种方法是:
public void onClickStart (View view) {
Thread timer = new Thread(){
public void run() {
...
runOnUiThread(new Runnable() {
public void run() {
setLabelText();
}
}
};
timer.start();
}
最后,请注意,这不是执行此类逻辑的最佳方式。 AsyncTask
与onProgressUpdate
似乎是一个更好的解决方案。
答案 1 :(得分:0)
我认为最好将您的功能放入MainActivity
类中的方法:
private void doMyOperation() {
runOnUiThread(.....);
}
并在你的帖子中调用该方法。
答案 2 :(得分:0)
您的代码中似乎有一个 Thread.sleep 阻塞了 UI。这可能会阻止用户界面更新。