Android 如何向服务添加计时器?

Android 如何向服务添加计时器?,android,android-service,Android,Android Service,我尝试向OnCreate方法、Onstart甚至AsyncTask添加计时器,但程序会崩溃。不太清楚为什么!这是我代码的一部分,在本例中,我添加到了OnStart @Override public void onCreate() { Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); Log.d(TAG, "onCreate"); } priv

我尝试向OnCreate方法、Onstart甚至AsyncTask添加计时器,但程序会崩溃。不太清楚为什么!这是我代码的一部分,在本例中,我添加到了OnStart

@Override
    public void onCreate() {
        Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onCreate");





    }
    private void startTimer()
    {           

        if (found != "Yes Found")
         {


            TimerTask updateProfile = new CustomTimerTask(MyService.this);
            timer.scheduleAtFixedRate(updateProfile, 0, 60*1000);

         }

    }
    @Override
    public void onDestroy() {
        Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onDestroy");
        //spool.release();

    }

    @Override
    public void onStart(Intent intent, int startid) {

        Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onStart");

        startTimer();


    }
计时器代码

public class CustomTimerTask extends TimerTask {


            private Context context;
            private Handler mHandler = new Handler();

            // Write Custom Constructor to pass Context
            public CustomTimerTask(Context con) {
                this.context = con;

            }

            @Override
            public void run() {
                // TODO Auto-generated method stub


                  //some code here


            }




            }
错误消息

03-17 13:16:35.661: E/AndroidRuntime(7634): FATAL EXCEPTION: main
03-17 13:16:35.661: E/AndroidRuntime(7634): java.lang.RuntimeException: Unable to start service com.example.saber.MyService@415c0510 with Intent { cmp=xxxx }: java.lang.NullPointerException
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2387)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread.access$1900(ActivityThread.java:127)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1221)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.os.Looper.loop(Looper.java:137)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread.main(ActivityThread.java:4511)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at java.lang.reflect.Method.invokeNative(Native Method)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at java.lang.reflect.Method.invoke(Method.java:511)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:743)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at dalvik.system.NativeStart.main(Native Method)
03-17 13:16:35.661: E/AndroidRuntime(7634): Caused by: java.lang.NullPointerException
03-17 13:16:35.661: E/AndroidRuntime(7634):     at com.example.saber.MyService.startTimer(MyService.java:67)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at com.example.saber.MyService.onStart(MyService.java:86)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.Service.onStartCommand(Service.java:438)
03-17 13:16:35.661: E/AndroidRuntime(7634):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2370)
03-17 13:16:35.661: E/AndroidRuntime(7634):     ... 10 more

我到底应该在哪里添加计时器?

您需要了解什么是
NullPointerException
。这意味着您正试图对
null
的某个对象调用一个方法

您列出的堆栈跟踪显示,
MyService
startTimer()
方法中,
NullPointerException
位于
MyService.java
的第67行

当您计算代码中的行数时,我怀疑您会发现
MyService.java
的第67行是这一行:

timer.scheduleAtFixedRate(updateProfile, 0, 60*1000);
如果这确实是导致异常的那一行,那就意味着您得到了一个
NullPointerException
,因为
timer
null
。由于您没有显示初始化
计时器
数据成员的任何代码,因此这当然是可能的

如果第67行不是我上面引用的那一行,那么您需要确定第67行中的哪些内容可能是
null
——请注意,这将是您在该行中调用方法的对象


另外,正如其他人所指出的,您需要学习如何在Java中比较对象<代码>=正在比较对象标识,而不是对象相等。

字符串需要与
进行比较!字符串#equals()
不是
=。另外,
timer
instantianted在哪里?确保find不为null,若要检查,请使用if(!“Yes find”。equals(find))我删除了查找到的字符串只是为了安全,但也是相同的错误。我更新了线程并添加了计时器代码。