首页 新闻 搜索 专区 学院

bindService报错

0
悬赏园豆:40 [已关闭问题] 关闭于 2015-07-14 16:51

试着通过绑定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>

himanxu的主页 himanxu | 菜鸟二级 | 园豆:204
提问于:2015-07-13 17:00
< >
分享
所有回答(1)
0

service启动需要一定的时间,所以应该把tv.set()放到onBind()方法中

himanxu | 园豆:204 (菜鸟二级) | 2015-07-14 16:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册