2 Stimmen

Dienst an eine Aktivität binden

Dies ist mein Code:

public class MainActivity extends Activity {
    private ComponentName mService;
    private Servicio serviceBinder;

    private ServiceConnection mConnection = new ServiceConnection() {
           public void onServiceConnected(ComponentName className, IBinder service) {
             serviceBinder = ((Servicio.MyBinder)service).getService();
           }

           public void onServiceDisconnected(ComponentName className) {
             serviceBinder = null;
           }
        };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Intent bindIntent = new Intent(this, Servicio.class);
        bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE);
    }

    @Override
    protected void onStart() {
        serviceBinder.somethingThatTakesTooMuch();
        super.onStart();
    }

public class Servicio extends Service {
    private final IBinder binder = new MyBinder();

    @Override
            public IBinder onBind(Intent intent) {
    return binder;
    }

    public int somethingThatTakesTooMuch() {
        return 1;
    }

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

Wenn ich es ausführe, Es erhält eine NullPointerException in dieser Zeile:

serviceBinder.somethingThatTakesTooMuch();

5voto

synic Punkte 25854

Ihr onStart aufgerufen wird, bevor die Verbindung zum Dienst abgeschlossen ist. Es ist nicht sofort.

Sie können nur garantieren, dass der Dienst verbunden ist, NACHDEM Ihr onServiceConnected aufgerufen wird. Erst dann können Sie Methoden auf serviceBinder aufrufen.

Versuchen Sie anzurufen serviceBinder.somethingThatTakesTooMuch() in der Zeile nach serviceBinder = ((Servicio.MyBinder)service).getService();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X