ठीक है, मैं एंड्रॉइड विकास के लिए नया हूं और एक सेवा से जुड़ने की कोशिश कर रहा हूं ताकि मैं इसे शुरू होने के बाद सेवा पर विधियों को कॉल कर सकूं। नीचे वर्णित गतिविधि और सेवा दोनों एक ही अनुप्रयोग का हिस्सा हैं इसलिए वहां कोई समस्या नहीं होनी चाहिए, लेकिन हर बार जब मैं अपना ऐप चलाता हूं तो मुझे निम्न त्रुटि मिलती है:एंड्रॉइड क्लासकास्ट अपवाद सेवा के लिए बाध्यकारी
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 प्रलेखन में उदाहरण का पालन किया है लेकिन यह अभी भी काम नहीं कर रहा है। क्या कोई इस पर प्रकाश डाल सकता है कि इसका क्या कारण हो सकता है?
अग्रिम धन्यवाद!
क्या आप मतलब चाहते: 'LocalBinder बांधने की मशीन = (LocalBinder ) सेवा;' यदि ऐसा है तो भी वही त्रुटि देता है! –
मैं जेनेरिक पूरी तरह से बाहर निकालने की दिशा में झुका रहा था। मैं अभी एक लिखित सेवा के उपयोग के त्वरित नमूने में संपादित करूंगा जो मैं अभी लिख रहा हूं। –
जेनिक्स के बिना खुद को जाना होगा, लेकिन अगर आप एक उदाहरण दे सकते हैं जो बहुत अच्छा होगा!धन्यवाद, जेम्स –