Thanks Chris for replying. You are right in saying that android requires developers to write an event-driven code and that effort needs to be put for designing the whole chain of events.
But for the following case as shown below, I don't think one can get rid of the NullPointerException thrown in onClick() method of MyServiceClient; Unless instead of storing Service Interface globally, one stores it locally. ------------------------------------------- CODE SNIPPET (UPDATED) ------------------------------------------- //class MyServiceClient in separate file - Used for accessing the service via a wrapper class class MyServiceClient extends Activity { //store a reference to service interface private ISomeServiceInterface mService = null; // reference stored globally here public void onCreate(Bundle savedInstanceState) { //some lines ServiceWrapperClass svc = new ServiceWrapperClass(getApplicationContext()); //access the service mService = svc.getService() //the getService() method returns null //Integer someValue = mService.someFunc(1, 2); //Moved the line into onClick() method //using a button's onClick event to call some function on the service Button btn = (Button)findViewById(R.id.someBtn); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Integer someValue = mService.someFunc(1, 2); // NullPointerException still thrown here as mService was null } }); } } //class ServiceWrapperClass in separate file - Used for binding to service and providing the service instance to client class ServiceWrapperClass { private static ISomeServiceInterface myService; //constructor public ServiceWrapperClass(Context context) { //create intent to connect to service Intent serviceIntent = new Intent("some.uri"); context.bindService(serviceIntent, progressBarServiceConn, Context.BIND_AUTO_CREATE); //access the service Integer someValue = myService.someFunc(1, 2); // NullPointerException here - How to make sure service should be running before any function is called on the service ? } private ServiceConnection progressBarServiceConn = new ServiceConnection(){ @Override public void onServiceConnected(ComponentName name, IBinder service) { myService = ISomeServiceInterface.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { myService = null; } }; public ISomeServiceInterface getService() { return myService; } } On Jul 22, 11:54 am, Chris Stratton <cs07...@gmail.com> wrote: > On Thursday, July 21, 2011 1:26:54 AM UTC-4, Animesh Sinha wrote: > > The issue is that I need to call the service methods as soon as it is > > connected. > > So, Is there any way by which I can execute the functions of service > > JUST AFTER binding is complete ? > > > It takes around 10-20ms for binding, I tried to make use > > Thread.sleep(30); but it delayed the service from being connected by > > the same sleep duration, therefore not solving the problem. > > The problem is that android requires you to write event driven code here. > It can't deliver a new event until you return from the current event. If > you sleep, you just delay the return, and thus the new event delivery which > can only occur after that. > > You are going to have to do a lot of re-thinking of how to architect this > whole process as a chain of events. Yes, it's painful, but you'll get > better at that kind of re-shuffling with time. > > > > > > > > > On Jul 20, 6:33 pm, Mark Murphy <mmu...@commonsware.com> wrote: > > > On Tue, Jul 19, 2011 at 12:21 PM, animeshsi <anime...@gmail.com> wrote: > > > > Is there some way by which I can make sure that the service binding is > > > > complete before any access is made to functions provided by the > > > > service ? > > > > Don't try using the Binder until onServiceConnected() is called. > > <http://commonsware.com/training> -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en