لا تعمل خدمة الخدمات داخل زر ، ولكن يعمل في onCreate - Android

StackOverflow https://stackoverflow.com/questions/3628999

سؤال

لدي خدمة محلية بسيطة للغاية أحاول ربطها بنشطتي. لقد عملت خلال هذا أمس مع Commonsware وأخرجني حيث كنت أواجه صعوبة في الحصول على الخدمة لربطها. اتضح أن السبب في أنني كنت أواجه الكثير من المتاعب هو أنني كنت أحاول ربط الخدمة بـ:

bindService(new Intent(this, myService.class), mConnection, Context.BIND_AUTO_CREATE);

داخل طريقة الفراغ التي تم استدعاؤها بعد نقرة زر.

private void doBindService() {
            bindService(new Intent(this, SimpleService.class), mConnection, Context.BIND_AUTO_CREATE);
            mIsBound = true;
        }

       private OnClickListener startListener = new OnClickListener() {
        public void onClick(View v){
            doBindService();
        }               
       };

عندما قمت بنقل مكالمة BindService () إلى طريقة OnCreate للنشاط ، فإنها تعمل بشكل جيد. ذكرت Commonsware شيئًا ما عن تلك الدعوة كونها غير متزامنة ولا أعرف ما يكفي عن إنشاء نشاط Android لمعرفة ما إذا كان هذا هو ما كانت مشكلتي أم لا. أعلم أن onServiceConnection () كان يتم استدعاؤه داخل ServiceConnection () عندما يتم النقر على الزر ، لن يعمل MboundService الخاص بي عندما حاولت الوصول إلى الأعضاء داخل الخدمة.

هل يمكن لأحد أن يخبرني لماذا لا يعمل داخل الزر ، لكن هل يعمل داخل OnCreate ()؟

تيا

هل كانت مفيدة؟

المحلول

ال this إشارة داخل doBindService ليس هو نفسه في كلتا الحالتين. إذا استدعت في onCreate سيكون إشارة إلى Activity إذا تم استدعاؤه من الزر ، فسيكون ذلك مرجعًا إلى OnClickListener. من الواضح أنك لا تريد أن تكون خدمتك ملزمة للمستمع انقر فوق الأزرار.

حاول التغيير this ل YOURACTIVITYNAME.this ومعرفة ما إذا كان ذلك يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top