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 <[email protected]> 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 <[email protected]> wrote:
> > > On Tue, Jul 19, 2011 at 12:21 PM, animeshsi <[email protected]> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en