1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Service binden - onBind() wird nicht aufgerufen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von J4y, 17.08.2011.

  1. J4y, 17.08.2011 #1
    J4y

    J4y Threadstarter Neuer Benutzer

    Beiträge:
    14
    Erhaltene Danke:
    2
    Registriert seit:
    12.06.2011
    Hallo,

    ich habe einen kleinen Service geschrieben, den ich über eine Activity aufrufen möchte.

    Code in der Activity:
    Code:
            Intent intent = new Intent(this, ConnectionService.class);
            mConnection = createServiceConnection();
            
            if(!mBound){
                Log.i(LoginActivity.class.getName(), "Binde Service");
                bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
            }
            Log.i(LoginActivity.class.getName(), "mService is " + mService);
    Methode createServiceConnection()
    Code:
            ServiceConnection mConnection =
                    new ServiceConnection(){
    
                public void onServiceConnected(ComponentName className, IBinder service) {
                    Log.i(LoginActivity.class.getName(), "Service connected");
                    LocalBinder<ConnectionService> binder = (LocalBinder<ConnectionService>) service;
                    mService = binder.getService();
                    mBound = true;
                }
    
                public void onServiceDisconnected(ComponentName className) {
                    Log.i(LoginActivity.class.getName(), "Service disconnected");
                    mBound = false;
                    
                }
                
            };
            return mConnection;
    der LocalBinder ist eine kleine Hilfsklasse, mit dem ich das Bind Objekt realisiere - angelehnt an den Tipp von
    http://www.ozdroid.com/#!BLOG/2010/12/19/How_to_make_a_local_Service_and_bind_to_it_in_Android

    Im ConnectionService habe ich dann diese Methode
    Code:
    public IBinder onBind(Intent arg0) {
            Log.i(ConnectionService.class.getName(), "Erzeuge Binder");
            return new LocalBinder<ConnectionService>(this);
        }
    Anhand der Log-Ausgaben lässt sich erkennen, dass bindService() aufgerufen wird, onBind() aber nicht.
    In der Manifest-Datei ist der Service hinterlegt.
    Target ist Android 1.5
    Woran kann das liegen?
     
  2. J4y, 17.08.2011 #2
    J4y

    J4y Threadstarter Neuer Benutzer

    Beiträge:
    14
    Erhaltene Danke:
    2
    Registriert seit:
    12.06.2011
    Ok das Thema hat sich geklärt :-D

    Das Problem war, dass ich davon ausgegangen bin, dass die Methode bindService erst beendet ist, wenn der Service korrekt angebunden ist. Daher führe ich im späteren Codeabschnitt direkt eine Anweisung auf den Server aus.
    Da das aber nicht der Fall ist, wird hier eine NullPointerException geworfen.
    Ich erzeuge nun den Service direkt in der onCreate() Methode und nicht erst im späteren Verlauf. Damit ist dann sichergestellt, dass der Service später schon existiert.
     

Diese Seite empfehlen