Bob, am I taking the wrong approach here? I'm hardly satisfied that it's just "working". I'd like to fully understand what's going on here.
Thanks, J On Mon, Apr 5, 2010 at 8:32 PM, Jason LeBlanc <[email protected]>wrote: > Here is my onCreate(), that works: > =========================== > > // Called at the start of the full lifetime. > @Override > public void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > setContentView(R.layout.light_control); > > // Initialize activity. > > // Obtain the Unit ID from the intent > Bundle extras = getIntent().getExtras(); > unitId = extras.getInt("com.scs.haus.UNIT_ID", 0); > > // Bind to the Connection Service > > Intent bindIntent = new Intent(LightController.this, > ConnectionService.class); > bindService(bindIntent, mConnection, > Context.BIND_AUTO_CREATE); > > viewUnitProperties = new Runnable(){ > @Override > public void run() { > try { > Thread.sleep(1000); > } catch (InterruptedException e) { > Log.e("SLEEP","I CANT SLEEP"); > } > > getUnitProperties(); > } > }; > Thread thread = new Thread(null, viewUnitProperties, > "ViewUnitPropertiesThread"); > thread.start(); > } > =========================== > standard binder stuff > =========================== > // Handles the connection between the service and activity > private ServiceConnection mConnection = new ServiceConnection() { > public void onServiceConnected(ComponentName className, IBinder > service) { > // Called when the connection is made > serviceBinder = > ((ConnectionService.MyBinder)service).getService(); > Log.i("LightController","Service Connected"); > } > > public void onServiceDisconnected(ComponentName className) { > // Received when the service unexpectedly disconnects > serviceBinder = null; > Log.i("LightController","Service Disconnected"); > } > }; > =========================== > > If I try to run the getUnitProperties() method outside of the Thread, I get > a NullExceptionPointer AND the Log.i for onServiceConnected() shows up in > the log after the exception. > > Thanks, > J > > > On Mon, Apr 5, 2010 at 8:08 PM, Bob Kerns <[email protected]> wrote: > >> It looks like you are trying to access the connection before the >> onBind() method is called? >> >> You should NOT be sleeping the thread. You should be returning, and >> then picking up your work once onBind() is called. >> >> You're actually blocking the service from running until you do return, >> since it needs to run in that same thread. >> >> On Apr 5, 2:53 pm, Jason LeBlanc <[email protected]> wrote: >> > Thanks for the response. I haven't meant to spam the group, I wasn't >> sure if >> > my post were posting. >> > >> > Problem Activity: LightController >> > Service: ConnectionService >> > Object within Service: Connection >> > >> > Basically all I am attempting to do is start the Service (from a Splash >> > Screen Activity) which will provide a Connection to a hardware >> controller. I >> > hope to use this Connection to send and receive messages with the >> hardware >> > controller. >> > >> > I have been able to bind to the Service and send/receive commands with >> the >> > controller in the Activity that loads after the Splash Screen. The >> problem >> > arose when I tried to create another Activity (LightController) and >> connect >> > to the same Service. Since, I'm just learning I assumed I was doing >> > something wrong with the Service (e.g. binding, unbinding, object >> sharing, >> > etc.) >> > >> > I finally realized in my LogCat that it was reporting that the Service >> was >> > connected after the bit of code I had written to test my connection. I'm >> > still not sure why this happens. Perhaps something to do with the way >> these >> > commands are queued? >> > >> > _ begin code snippet from onCreate()_ >> > >> > // Bind to the Connection Service >> > Intent bindIntent = new Intent(LightController.this, >> > ConnectionService.class); >> > bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE); >> > >> > // Request data from the controller >> > if (unit = serviceBinder.c.connected() ) { >> > Log.i(Connection Service is connected);} else { >> > >> > Log.i(Connection Service is not connected); >> > >> > } >> > >> > _ end code snippet from onCreate()_ >> > >> > Anyhow, the above if/then would result in a NullPointerException. I >> > eventually moved it to a try/catch which resulted in a WARN instead of >> an >> > ERROR (see LogCat posted above). >> > >> > So finally, I have moved the if/then statement to a Thread and all is >> well. >> > I sleep for 1000 ms in the Thread prior to attempting to access the >> > Connection. I am assuming this small time delay is what was needed in >> order >> > to establish the binding to the service. Is it that, or are all of the >> > commands queued until the end of the onCreate() and then executed in >> some >> > order determined by Android? (can this be clarified?). >> > >> > Additionally, I should probably check to see if the binding has been >> > completed instead of sleeping the thread for an arbitrary time period. >> Then >> > if the service is not bound, sleep for shorter time periods, and then >> check >> > again. This may improve the responsiveness of the app. I'm assuming a >> > _while_ or _for_ loop would be a good method to perform this check. >> > >> > Thanks, >> > J >> > >> > On Apr 5, 2010 1:42 PM, "jotobjects" <[email protected]> wrote: >> > >> > Certainly not obvious what you are doing or why it doesn't work. Can >> > you boil this down to a short example that causes the problem so we >> > can see the code rather than just a long logcat? >> > >> > On Apr 5, 8:30 am, Jason LeBlanc <[email protected]> wrote: >> > >> > > Is there an obvious reason why ... >> > > On Apr 4, 2010 9:01 AM, "Tunneling" <[email protected]> wrote: >> > >> > > I have a Connection objec... >> > > [email protected]<android-developers%[email protected]><android-developers%2Bunsubs >> [email protected]> >> > >> > <android-developers%[email protected]<android-developers%[email protected]><android-developers%252Bu >> [email protected]> >> > >> > > For more options, visit this group athttp:// >> > >> > groups.google.com/group/android-developers?hl=en >> > >> > >> > >> > > To unsubscribe, reply using "remove me" as the subject. >> > >> > -- >> > >> > You received this message because you are subscribed to the Google >> > Groups "Android Developers" group... >> >> -- >> 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]<android-developers%[email protected]> >> For more options, visit this group at >> http://groups.google.com/group/android-developers?hl=en >> > > -- 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

