如何在构造函数中调用对象

时间:2015-02-04 16:51:17

标签: java android eclipse

我在一个类中有这个代码,

public class refre
{
    final Timer timers = new Timer();
    final Handler handler = new Handler(); 
    public void trig(){
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        new activityIns().execute();
                    }
                });
            }
        };       

        timers.schedule(task, 1000, 10000);
    }
}

并在此处调用refre课程:

private refre refresher = new refre();
void onStoper(){
    refresher.timers.cancel();
    super.onStop();
}

如何调用"任务"在onStoper内?

3 个答案:

答案 0 :(得分:0)

一种可能的解决方法是使用专用方法取消任务:

public class Refre
{
    final Timer timers = new Timer();
    final Handler handler = new Handler(); 
    private TimerTask task;

    public void trig(){
        task = new TimerTask() {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        new activityIns().execute();
                    }
                });
            }
        };       

        timers.schedule(task, 1000, 10000);
    }

    public void cancelTask() {
        timers.cancel(); // assuming http://developer.android.com/reference/java/util/Timer.html
    }
}

然后:

private Refre refresher = new Refre();
void onStoper(){
    refresher.cancelTask();
    super.onStop();
}

答案 1 :(得分:0)

您的变量是本地变量。这意味着你不能在你所在的街区之外的任何地方使用。

要解决您的问题,您显然可以将TimerTask保存在refre类的公共或私有变量中。 (当你私有化时,也要确保创建一个getter。)

但是,在您的情况下,我假设您可以轻松地从onTrig()返回TimerTask,以便在onStopped()中使用它。

我希望这有帮助!

PS:编写代码并共享代码时,应遵循Java约定。这些约定描述了类名应始终以大写字母开头。

答案 2 :(得分:0)

嗯,你不能。 tasktrig()方法中声明,因此只能在此方法的范围内访问。它被称为局部变量花一点时间来了解有关范围的更多信息,访问task它应该至少在课堂上使用public modifier声明(同时请注意,这是一个不好的做法,你应该将其设为私有并使用getter访问类中的任何变量。

顺便说一下,在描述班级名称时,你应该使用第一个大写字母。看看Java代码约定:Code Conventions at Oracle website