我是Android SDK的新手,因此问题可能非常简单。
我尝试制作显示当前时间的app。我知道如何获得当前时间,但我需要更新时间。所以我尝试使用while / if语句来更新onCreate()和主Activity类内部的时间,但是会弹出4个错误说"意外的Decleration结束。
我真的找不到解决这个问题的方法,所以任何帮助都会非常感激。
答案 0 :(得分:1)
我建议您使用ScheduledThreadPoolExecutor类而不是while
循环。这个tutorial中有一个关于如何创建时钟应用程序的例子。它可以作为一个起点。
class ClockTask implements Runnable {
@Override
public void run() {
updateClock();
}
}
ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1);
se.scheduleAtFixedRate(new ClockTask(), 0, 1000, TimeUnit.MICROSECONDS);
答案 1 :(得分:1)
我认为更长的例子会对你更有用。
为应用程序制作布局,调用文件activity_main.xml。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.timedemo.MainActivity">
<TextView
android:id="@+id/textClock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignTop="@+id/textView" />
</LinearLayout>
创建一个名为MainActivity.java的文件,使其扩展Activity(或其他扩展Activity的内容)
在onCreate方法中初始化你的布局。
使用处理程序在延迟时间运行代码,而不是暂停线程。
public class MainActivity extends AppCompatActivity {
//Handler can be used to send Runnables (code to run) to a specific Thread.
//In this case the UI-thread.
Handler handler = new Handler();
//TextView variable defined in Class-scope.
TextView myTextClock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Load the layout from activity_main.xml into this Activity.
setContentView(R.layout.activity_main);
//Find the textclock that is mentioned in the activity_main.xml
//Use the ID to find the right View.
//As you can see in the xml-file, the id is 'textClock'.
//Looks like this in the XML --> <TextView android:id="@+id/textClock" />
myTextClock = (TextView) this.findViewById(R.id.textClock);
//Tell the Handler to execute this code at an interval.
handler.postDelayed(codeToRun, 1000);
}
//The runnable contains the code that will be run every second.
Runnable codeToRun = new Runnable() {
@Override
public void run() {
updateTime();
}
};
public void updateTime(){
//Code to update the Clock on the UI-thread
//see: http://developer.android.com/reference/java/text/SimpleDateFormat.html
DateFormat sdf = DateFormat.getDateTimeInstance();
myTextClock.setText(sdf.format(new Date()));
//Make sure it runs the next time too.
handler.postDelayed(codeToRun, 1000);
}
}
希望这可以帮助您走上正确的道路。
答案 2 :(得分:0)
我不确定你打算怎么做,但请记住,你不要拖延主线程。所以避免像这样的结构:
while(true){ Thread.sleep(1000); updateTime(); }
更好的方法是使用Handler,例如:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
updateTime();
}
}, 1000);
希望这会有所帮助; - )