试着通过绑定service和activity,通过service获取时间并在activity显示,主要是想学service的使用,但程序运行老是报错
public void startTimeService(View v){
// startService(intent);
Log.d(tag,"--startTimeService--");
bindService(intent, con, Service.BIND_AUTO_CREATE);
Log.d(tag,"post--startTimeService");
tv.setText("当前时间为:/n"+mBinder.getService().getTime());
运行能够打出--startTimeService--和post--startTimeService,但是报错
07-13 08:23:19.832: E/AndroidRuntime(3217): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.himanmin.xu.servicedemo.TimeService com.himanmin.xu.servicedemo.TimeService$MyBinder.getService()' on a null object reference
说是空指针的问题
我的TimeService.java如下
public class TimeService extends Service {
private final String tag = "TimeService";
private int state;
private int count;
private boolean quit;
public class MyBinder extends Binder{
public TimeService getService(){
Log.d(tag,"--getService()");
return TimeService.this;
}
}
private MyBinder mBinder = new MyBinder();
public int getState(){
//获取Service的运行状态:count
Log.d(tag,"--getState()");
return state;
}
public String getTime(){
Log.d(tag,"--getTime()");
SimpleDateFormat dateFormat24 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//12小时制
// SimpleDateFormat dateFormat12 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return dateFormat24.format(Calendar.getInstance().getTime());
}
public int getCount(){
Log.d(tag,"--getCount()");
return count;
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.d(tag,"--onBind");
System.out.println("Service is Binded");
return mBinder;
}
@Override
public void onCreate(){
super.onCreate();
Log.d(tag,"--onCreate");
System.out.println("Service for time is created");
count = (int) System.currentTimeMillis();
}
@Override
public boolean onUnbind(Intent intent){
Log.d(tag,"--onUnbind");
System.out.println("Serveice is unbinded");
count = (int) (System.currentTimeMillis() - count);
return true;
}
@Override
public void onDestroy(){
super.onDestroy();
Log.d(tag,"--onDestroy");
this.quit = true;
System.out.println("Service for time is destoryed");
count = (int) (System.currentTimeMillis() - count);
}
}
按理说bindService()调用后会创建TimeService的onCreate()方法,然后就应该打印出--onCreate,可是没有打印,所以我估计是
bindService(intent, con, Service.BIND_AUTO_CREATE);压根就没有执行,但实在想不出不执行的原因
intent和mainfest.xml文件如下
private final String serviceAction = "com.himanmin.xu.servicedemo.TIME_SERVICE";
intent = new Intent();
intent.setAction(serviceAction);
<service android:name = "com.himanmin.xu.servicedemo.TimeService">
<intent-filter>
<action android:name="com.himanmin.xu.servicedemo.TIME_SERVICE"/>
</intent-filter>
</service>
service启动需要一定的时间,所以应该把tv.set()放到onBind()方法中