这个代码块中缺少什么?

时间:2014-01-11 17:05:23

标签: java android

我是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;
    }
}

2 个答案:

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