This seems to be the fix. oneway interface IRemoteServiceCallback { /** * Called when the service has a new value for you. */ void valueChanged(int value); void valueChangedList(in List values); void valueString(String value);
} On Aug 15, 12:44 am, D <donnie.h....@gmail.com> wrote: > Hi, > > I am having trouble passing a List type from a remote service to the > UI activity. > Here is a modified version of RemoteService example from the APIDemo. > (only included where its modified) > > PROBLEM: The call back function (for List) is called successfully, but > the List returned is empty... > > It works fine when the service does not run in a remote process. > (w/o android:process=":remote" in the manifest file) > > Why is this happening...? > > Also, when I tried Map type, it didn't even successfully generate a > IRemoteServiceCallback.java file.... > it tries to do new Map().... and complains that its an abstract > class.. > (FYI, List instantiates by new ArrayList()) > > 1. in IRemoteServiceCallback.java > > oneway interface IRemoteServiceCallback { > /** > * Called when the service has a new value for you. > */ > void valueChanged(int value); > void valueChangedList(out List values); > void valueString(String value); > > } > > 2. In RemoteServiceBinding.java > /** > * This implementation is used to receive callbacks from the > remote > * service. > */ > private IRemoteServiceCallback mCallback = new > IRemoteServiceCallback.Stub() { > /** > * This is called by the remote service regularly to tell us > about > * new values. Note that IPC calls are dispatched through a > thread > * pool running in each process, so the code executing here > will > * NOT be running in our main thread like most other things -- > so, > * to update the UI, we need to use a Handler to hop over > there. > */ > public void valueChanged(int value) { > Log.d("ee", "valuechanged=" + value); > mHandler.sendMessage(mHandler.obtainMessage(BUMP_MSG, value, > 0)); > } > > public void valueChangedList(List values) > throws RemoteException { > // TODO Auto-generated method stub > Log.d("ee", "valuechangedlist=" + > values.toString()); > > mHandler.sendMessage(mHandler.obtainMessage(LIST_MSG, values)); > } > > public void valueString(String value) throws > RemoteException { > Log.d("ee", "valueString=" + value); > } > }; > > 3. In RemoteService.java > > private final Handler mHandler = new Handler() { > @Override public void handleMessage(Message msg) { > switch (msg.what) { > > // It is time to bump the value! > case REPORT_MSG: { > // Up it goes. > int value = ++mValue; > > // Broadcast to all clients the new value. > final int N = mCallbacks.beginBroadcast(); > for (int i=0; i<N; i++) { > try { > mCallbacks.getBroadcastItem(i).valueChanged > (value); > List<String> values = new > ArrayList<String> > (); > values.add("Hello, Mars"); > mCallbacks.getBroadcastItem > (i).valueChangedList(values); > > mCallbacks.getBroadcastItem(i).valueString > ("HEEELLLLOOOO"); > } catch (RemoteException e) { > // The RemoteCallbackList will take care > of removing > // the dead object for us. > } > } > mCallbacks.finishBroadcast(); > > // Repeat every 1 second. > sendMessageDelayed(obtainMessage(REPORT_MSG), > 1*1000); > } break; > default: > super.handleMessage(msg); > } > } > }; --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---