Получение NullPointerException при привязке к сервису из действия - PullRequest
0 голосов
/ 03 марта 2012

У меня возникает следующая проблема при попытке привязать активность к сервису.

Код активности, и это действие является частью TabActivity

public class SettingsActivity extends Activity{

private BkgService myBkgService;
Button BtnSubmit;

public void onCreate(Bundle savedInstanceState) {

setContentView(R.layout.settings);
BtnSubmit = (Button)findViewById(R.id.XmlBtnSubmit);
BtnSubmit.setOnClickListener(onSubmit);

Intent bindIntent = new Intent(this, BkgService.class);
bindService(bindIntent, serviceConncetion, Context.BIND_AUTO_CREATE);
}


private ServiceConnection serviceConncetion = new ServiceConnection() {

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myBkgService = ((BkgService.MyBinder)service).getService();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            myBkgService = null;
        }
    };

private OnClickListener onSubmit = new OnClickListener() {

        @Override
        public void onClick(View v) {
            myBkgService.startCounting();
        }
    };
}

Now My ServiceКод выглядит следующим образом:

    public class BkgService extends Service{
    private IBinder mBinder;
    private int i;


    public void onCreate() {
           super.onCreate();
    }

    @Override
    public IBinder onBind(Intent arg0) {
            return mBinder;
    }

    public class MyBinder extends Binder {
    BkgService getService() {
            return BkgService.this;
        }
    }

    public int startCounting(){
        return i=i+1;
    }

}

. Теперь, когда я нажимаю на BtnSubmit в своей деятельности, я получаю исключение NullPointerException.Я проверил, что я его, потому что в myBkgService.startCounting() значение myBkgService равно нулю. Я не могу выяснить, почему я получаю этот нулевой указатель.Разве моя деятельность не связана с сервисом?Пожалуйста, предложите какое-то решение для этого.Я застрял здесь.

Ответы [ 2 ]

1 голос
/ 03 марта 2012

попробуйте так:

 public void onCreate(Bundle savedInstanceState) {

    setContentView(R.layout.settings);
    BtnSubmit = (Button)findViewById(R.id.XmlBtnSubmit);
    BtnSubmit.setOnClickListener(onSubmit);

    serviceConncetion = new ServiceConnection() {

           @Override
           public void onServiceConnected(ComponentName name, IBinder service) {
                myBkgService = ((BkgService.MyBinder)service).getService();
           }

           @Override
           public void onServiceDisconnected(ComponentName name) {
                myBkgService = null;
           }
    };
    Intent bindIntent = new Intent(this, BkgService.class);
    bindService(bindIntent, serviceConncetion, Context.BIND_AUTO_CREATE);
 }
0 голосов
/ 03 марта 2012

Убедитесь, что вы объявили свой сервис в вашем AndroidManifest.xml.Если вы этого не сделаете, то вызов bindService вернет false.

Я также заметил, что вы не инициализировали свой mBinder, в вашем BkgService требуется что-то вроде следующего.

...