我是Android应用程序开发的新手,所以我正在从这个网站和我可以通过的任何其他网站上学习!
我从另一个网站获得了代码,以显示手机的当前DateTime值。代码如下:
TextView textView1 = (TextView) findViewById(R.id.textView1);
SimpleDateFormat timeNow = new SimpleDateFormat("hh:mm:ss");
textView1.setText(timeNow.format(new Date()));
现在,我使用这个网站获得每秒的提示建议,所以我将使用一个计时器。
现在的代码如下所示:
private static updateTextView () {
TextView textView1 = (TextView) findViewById(R.id.textView1);
SimpleDateFormat timeNow = new SimpleDateFormat("hh:mm:ss");
textView1.setText(timeNow.format(new Date()));
}
private Timer timer1 = new Timer();
timer1.schedule(updateTextView, 1000);
我自己这样做,每个计时器都需要自己的方法,所以我试着创建一个。但由于我是一个新手,我不知道如何在Java中创建一个方法。错误在static
,错误行为:
插入enumbody以完成阻止声明
我现在该怎么办?
完整的代码如下:
package com.something.widget;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class Main_Page extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_page);
private static TextView updateTextView () {
TextView textView1 = (TextView) findViewById(R.id.textView1);
SimpleDateFormat timeNow = new SimpleDateFormat("hh:mm:ss");
textView1.setText(timeNow.format(new Date()));
}
private Timer timer1 = new Timer();
timer1.schedule(updateTextView, 1000);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main__page, menu);
return true;
}
}
答案 0 :(得分:2)
要使用Timer
,您需要创建一个TimerTask
对象,其run()
方法运行您需要的代码。你可以这样写(虽然这不是唯一的方法)。
// To create the timer -
Timer timer1 = new Timer();
timer1.schedule(new TextViewTask(), 1000);
// In TextViewTask.java - package declaration and imports omitted
public class TextViewTask.java extends TimerTask {
@Override
public void run() {
TextView textView1 = (TextView) findViewById(R.id.textView1);
SimpleDateFormat timeNow = new SimpleDateFormat("hh:mm:ss");
textView1.setText(timeNow.format(new Date()));
}
}
答案 1 :(得分:1)
你有一个嵌套在另一个方法体内的方法,它需要在类体中声明,就像在C#中一样。它也不应该是static
,因此它可以访问findViewById
方法和void
,因为它不会返回任何内容。
protected void onCreate(Bundle savedInstanceState) {
//...
}
private void updateTextView () {
TextView textView1 = (TextView) findViewById(R.id.textView1);
SimpleDateFormat timeNow = new SimpleDateFormat("hh:mm:ss");
textView1.setText(timeNow.format(new Date()));
}
Timer
也应该是类级别对象,其调度方法需要TimerTask
。您可以使用此语法创建新的anonymous timer task。
timer.schedule(new TimerTask(){
void run() {
//Your code ...
}
}
但总的来说,在尝试这个之前,你应该先阅读一下Java。我建议Oracle Java Tutorials。