java.lang.Classcastexception-Fehler: android.os.BinderProxy kann nicht umgewandelt werden, LocalBinder

Ich habe eine Service Versuch, mich zu binden, mein main Activity, aber ich erhalte eine

java.lang.Classcastexception-Fehler: android.os.BinderProxy kann nicht umgewandelt werden, com.walintukai.rubix.ConnectionService$LocalBinder.

Ich erklärt haben, den Dienst in meiner manifest. Warum ist das passiert?

Manifest-Erklärung

<service android:name=".ConnectionService" />

Service (simplified code)

public class ConnectionService extends Service {

static final String TAG = ConnectionService.class.getName();

private BluetoothAdapter mBtAdapter = null;
public BluetoothGatt mBluetoothGatt = null;
private ConnectionServiceEventListener mIRedBearServiceEventListener;
HashMap<String, BluetoothDevice> mDevices = null;
private BluetoothGattCharacteristic txCharc = null;
private final IBinder mBinder = new LocalBinder();

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

public class LocalBinder extends Binder {
    public ConnectionService getService() {
        return ConnectionService.this;
    }
}

@Override
public void onCreate() {
    super.onCreate();

    final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
    mBtAdapter = bluetoothManager.getAdapter();

    if (mBtAdapter == null) 
        return;

    if (mDevices == null) 
        mDevices = new HashMap<String, BluetoothDevice>();
}

@Override
public void onDestroy() {
    if (mBluetoothGatt == null)
        return;

    mBluetoothGatt.close();
    mBluetoothGatt = null;

    super.onDestroy();
}

}

Haupttätigkeit

public class MainActivity extends ActionBarActivity {

private ConnectionService service;

ServiceConnection connection = new ServiceConnection() {

    @Override
    public void onServiceDisconnected(ComponentName name) {
        Log.i("ConnectionService", "Disconnected");
        service = null;
    }

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        LocalBinder binder = (LocalBinder) service;
        service = (IBinder) binder.getService();

        if (service != null) {
            Log.i("RedBearService", "Connected");

        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction().add(R.id.container, ViewPagerFragment.newInstance()).commit();
    }
}

@Override
public void onStart() {
    super.onStart();
    startService();
}

@Override
public void onStop() {
    super.onStop();
    stopService();
}

private void startService() {
    Intent service = new Intent(this, ConnectionService.class);
    bindService(service, connection, Context.BIND_AUTO_CREATE);
}

private void stopService() {
    unbindService(connection);
}

}

Stacktrace

07-30 17:19:39.065: E/AndroidRuntime(20891): java.lang.ClassCastException: android.os.BinderProxy cannot be cast to com.walintukai.rubix.ConnectionService$LocalBinder
07-30 17:19:39.065: E/AndroidRuntime(20891):    at com.walintukai.rubix.MainActivity$1.onServiceConnected(MainActivity.java:58)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1110)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1127)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at android.os.Handler.handleCallback(Handler.java:733)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at android.os.Handler.dispatchMessage(Handler.java:95)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at android.os.Looper.loop(Looper.java:136)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at android.app.ActivityThread.main(ActivityThread.java:5050)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at java.lang.reflect.Method.invokeNative(Native Method)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at java.lang.reflect.Method.invoke(Method.java:515)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
07-30 17:19:39.065: E/AndroidRuntime(20891):    at dalvik.system.NativeStart.main(Native Method)
  • Starten Sie den Dienst auf dem gleichen Prozess wie die app?
  • Sein sollte. Wie kann ich das überprüfen? Ich bin ab und auch die Bindung des Dienstes in der onStart Anruf von meiner Haupttätigkeit.
  • Bitte zeigen Sie, wie Sie erklären, den Dienst in der manifest-Datei.
  • Können Sie Ihre Haupttätigkeit-code als auch?
  • Bearbeitet sind Haupt-Tätigkeit-und manifest-Erklärung.
  • Ich bin tatsächlich erhalten eine andere Fehlermeldung jetzt: java.lang.Classcastexception-Fehler: com.walintukai.rubix.ConnectionService kann nicht gewirkt werden, um android.os.IBinder, die auf dieser Linie: service = (IBinder) binder.getService();
  • Sind Sie sicher, dass Ihre vereinfachte code korrekt ist? Die Aktivität der onServiceConnected ist falsch casting-die Rückkehr von der getService-Methode zurück, um ein IBinder.
  • WOW... ok, ich fühle mich wirklich dumm. Ich nannte den ConnectionService variable service und diese wurde sich mit der Methode, denn Sie hatte die variable service als auf die der Parameter... Danke für die Hilfe Jungs! /foreheadslap

InformationsquelleAutor The Nomad | 2014-07-31
Schreibe einen Kommentar