无法解析符号

时间:2015-12-18 14:24:11

标签: java android

我尝试了这段代码(如下所示),它说“无法解析符号'customHandler'”,我是初学者,所以我还不知道如何解决这个问题。 如果你能解释我如何修复它会很棒。

我感谢你的每一个帮助:D

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //------------------
    //------------------
    android.os.Handler customHandler = new android.os.Handler();
    customHandler.postDelayed(updateTimerThread, 0);
}


private Runnable updateTimerThread = new Runnable() {
    public void run() {
        //write here whatever you want to repeat
        customHandler.postDelayed(this, 1000);
    }
};

我试图让方法从每分钟开始运行一次。

2 个答案:

答案 0 :(得分:2)

customHandler是方法onCreate中的本地变量,因此方法run()无法看到它。

使customHandler成为您要修复的类的成员变量

//Member variable
android.os.Handler customHandler;

public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      //Assign value
      customHandler = new android.os.Handler();
      customHandler.postDelayed(updateTimerThread, 0);
}


    private Runnable updateTimerThread = new Runnable() {
          public void run()
          {
            //USE the value
            customHandler.postDelayed(this, 1000);
          }
    };

答案 1 :(得分:0)

customHandler

中无法看到您的updateTimerThread对象。

尝试通过将此变量移出方法之外来更改此变量的可见性。

这是一个例子:

android.os.Handler customHandler; 

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //------------------
    //------------------
    customHandler = new android.os.Handler();
    customHandler.postDelayed(updateTimerThread, 0);
}


private Runnable updateTimerThread = new Runnable() {
    public void run() {
        //write here whatever you want to repeat
        customHandler.postDelayed(this, 1000);
    }
};

但是使用TimerTimerTask可能比在处理程序上递归调用postDelay更好。

它使代码更清晰,它确保它将以特定频率运行(例如每分钟),而您的解决方案只允许修复运行结束和下一个运行结束之间的延迟(如果运行需要30秒,延迟时间为1分钟,每隔1.5分钟运行一次

// declare your timer
Timer basicTimer; 

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //------------------
    //------------------
    // create a Timer
    basicTimer = new Timer();
    // create the periodic task, here it's an anonymous class
    TimerTask updateTimerThread = new TimerTask() {
        public void run() {
            //write here whatever you want to repeat
            // no need to call postDelayed
        }
    };
    // schedule the task to run every minutes
    basicTimer.scheduleAtFixedRate(updateTimerThread, 0, 60*1000); // 1minutes = 60000 ms
}