如何在Android SDK中使用if / while语句?

时间:2016-04-01 17:51:03

标签: android sdk

我是Android SDK的新手,因此问题可能非常简单。

我尝试制作显示当前时间的app。我知道如何获得当前时间,但我需要更新时间。所以我尝试使用while / if语句来更新onCreate()和主Activity类内部的时间,但是会弹出4个错误说"意外的Decleration结束。

我真的找不到解决这个问题的方法,所以任何帮助都会非常感激。

3 个答案:

答案 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);

http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,%20long)

希望这会有所帮助; - )