Исключение Android ClassCast при привязке к службе

Хорошо, я новичок в разработке Android и пытаюсь выполнить привязку к службе, чтобы я мог вызывать методы службы после ее запуска. Действия и служба, описанные ниже, являются частью одного и того же приложения, поэтому здесь не должно быть никаких проблем, но каждый раз, когда я запускаю свое приложение, я получаю следующую ошибку:

java.lang.ClassCastException: android.os.BinderProxy

Строка, в которой это происходит:

LocalBinder binder = (LocalBinder) service;

Код моей активности (упрощенно):

public class Main extends Activity {

    boolean gpsBound = false;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    /** Called whenever the activity is started. */
    @Override
    protected void onStart() {
        super.onStart();
        // Bind to GPSService
        Intent i = new Intent(this, GPSService.class);
    startService(i);
    bindService(i, connection, Context.BIND_AUTO_CREATE);
    }

    /** service binding */
    private ServiceConnection connection = new ServiceConnection() {

        public void onServiceConnected(ComponentName className, IBinder service) {
            // After binding to GPSService get the instance of it returned by IBinder
        LocalBinder binder = (LocalBinder) service;
            gpsBound = true;
        }

        public void onServiceDisconnected(ComponentName className) {
            gpsBound = false;
        }
    };

}

Служба:

public class GPSService extends Service {

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

    @Override
    public IBinder onBind(Intent i) {
    // TODO Auto-generated method stub
    return new LocalBinder<GPSService>(this);
    }


   /**
    * Our implementation of LocationListener that handles updates given to us
    * by the LocationManager.
    */
    public class CustomLocationListener implements LocationListener {

        DBHelper db;

        CustomLocationListener() {
            super();
        }

    // Overridden methods here...

    }

}

И, наконец, мой LocalBinder:

/**
 * A generic implementation of Binder to be used for local services
 * @author Geoff Bruckner  12th December 2009
 *
 * @param <S> The type of the service being bound
 */

public class LocalBinder<S> extends Binder {
    private String TAG = "LocalGPSBinder";
    private  WeakReference<S> mService;


    public LocalBinder(S service){
        mService = new WeakReference<S>(service);
    }


    public S getService() {
        return mService.get();
    }
}

Я понимаю значение исключения ClassCast, но не могу понять, что делать. ! Я следил за примером в документации Google, но он все еще не работает. Может ли кто-нибудь пролить свет на то, что могло быть причиной этого?

Заранее спасибо!

6
задан James Herrington 7 November 2011 в 17:31
поделиться