У меня есть служба, и я пытаюсь связать с ней действие. Проблема в том, что ... после запуска bindService(..)
, экземпляр службы, который установил Im внутри serviceconnection, по-прежнему равен нулю, и я не знаю почему.служебный экземпляр все еще null после привязки
private ConnectionService conn;
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
conn = ((ConnectionService.ConnectionBinder)service).getService();
Toast.makeText(main_tab_page.this, "Connected", Toast.LENGTH_SHORT)
.show();
}
@Override
public void onServiceDisconnected(ComponentName name) {
conn = null;
}
};
@Override
protected void onStart()
{
super.onStart();
//check start connection service
if(conn == null)
{
Intent serviceIntent = new Intent(this, ConnectionService.class);
bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE);
}
//connect to server
server.conn = conn;
//THIS STATEMENT FAILS: NULL REFERENCE, conn is Null here, and I have no idea why
conn.ConnectToServer(server);
server.StartReader();
}
Да: Служба определена в манифесте.
Да: я могу запустить службу из MAIN Activity (этот код находится в действии, которое запускается в основном действии, в котором мне нужно привязываться к службе). Я проверил, чтобы убедиться, что служба действительно действительно начинается.
В соответствии с каждым примером, который мне удалось найти для связанных служб, это должно работать. Может ли кто-нибудь сказать мне, почему его нет?
Edit: Добавить определение кода службы
public class ConnectionService extends Service{
private BlockingQueue<String> MessageQueue;
public final IBinder myBind = new ConnectionBinder();
public class ConnectionBinder extends Binder {
ConnectionService getService() {
return ConnectionService.this;
}
}
private Socket socket;
private BufferedWriter writer;
private BufferedReader reader;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(MessageQueue == null)
MessageQueue = new LinkedBlockingQueue<String>();
return Service.START_NOT_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
return myBind;
}
//some other code that has everything to do with what the service does, and nothing to do with how it should be started/run
}