2013-11-07 3 views
2

У меня есть служба, и я пытаюсь связать с ней действие. Проблема в том, что ... после запуска 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 
} 

ответ

0

Пожалуйста, проверьте обслуживание объявлен в манифесте.

Смежные вопросы