如何添加计时器到服务?

问题描述:

我尝试添加一个计时器到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 [email protected] 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 

确切位置在哪里我,我想补充的计时器?

+0

字符串需要用'!字符串#等号进行比较()''不!='。另外,'定时器'在哪里实例化? – 2013-03-17 17:32:00

+1

说明:请确保发现不为空,检查,如果使用(!“是找到” .equals(发现)) – 2013-03-17 17:32:39

+0

我删除找到的字符串只是为了安全起见,但同样的错误。我更新了线程并添加了计时器代码。 – Ammar 2013-03-17 17:39:12

你需要学习NullPointerException是什么。这意味着您正在尝试调用某个对象的方法,该对象是null

您列出的堆栈跟踪显示您的NullPointerExceptionMyService.java的行号67上,在startTimer()方法MyService中。

当你算在你的代码行,我怀疑你会发现,行号的MyService.java 67是这一行:

timer.scheduleAtFixedRate(updateProfile, 0, 60*1000); 

如果这确实是导致您的异常的行,这将意味着你得到一个NullPointerException因为timernull。由于您在初始化数据成员时未显示任何代码,因此这当然是可行的。

如果行号67不是我上面引用的行,那么您需要确定行67上的内容可能是null - 请注意,它将是您在该行中调用方法的对象。

而且,正如其他人所指出的那样,你需要学习如何在Java对象比较。 !=被比较对象身份,不反对平等