I'm building an application that can send and received OSC. I'm using JavaOSC, it feets perfectly my needs.
I'm sending color value in OSC message, and receiving them also.
I send the color from a colorpicker based on this color picker http://code.google.com/p/color-picker-view/ it works great.
My problem is :
- When I choose the color in the color picker i'm setting the background of the layout (where the color picker is) view with :
private ColorPickerView.OnColorChangedListener colorListener = new ColorPickerView.OnColorChangedListener(){
@Override
public void onColorChanged(int color) {
caller.sending("color", color);
mScreen.setBackgroundColor(color);
}
};
where mScreen is a LinearLyout
mScreen = (LinearLayout) findViewById(R.id.myScreen);
It works as expected.
- When I'm receiving an OSC message with color I'd like to change the background too, but it crashes.
My listener is
OSCListener listener = new OSCListener() {
public void acceptMessage(java.util.Date time, OSCMessage message) {
//en cas de message vide
if (message.getArguments().length == 0) return;
//sinon on recupere les elements et on les tries
Object[] args = message.getArguments();
if (args[0].toString().contains("alpha")) Log.i("receiver osc", "Message received!");
//Instructions
if (args[0].toString().contains("color")) {
int color = (Integer)args[1];
//mColorPickerView.setColor((Integer)args[1]);
mScreen.setBackgroundColor(color);
}
else return;
}
You can find the crash report below. Do the function setBackgroundColor need to be in a particular function to work properly (in a onClick function for example) or when it redraws something on the screen ?
Crash report
08-05 15:18:15.035: WARN/dalvikvm(18083): threadid=7: thread exiting with uncaught exception (group=0x4001d7d0) ERROR/AndroidRuntime(18083): FATAL EXCEPTION: Thread-8 ERROR/AndroidRuntime(18083): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. ERROR/AndroidRuntime(18083): at android.view.ViewRoot.checkThread(ViewRoot.java:2811) ERROR/AndroidRuntime(18083): at android.view.ViewRoot.requestLayout(ViewRoot.java:594) ERROR/AndroidRuntime(18083): at android.view.View.requestLayout(View.java:8180) ERROR/AndroidRuntime(18083): at android.view.View.requestLayout(View.java:8180) ERROR/AndroidRuntime(18083): at android.view.View.requestLayout(View.java:8180) ERROR/AndroidRuntime(18083): at android.view.View.setBackgroundDrawable(View.java:7535) ERROR/AndroidRuntime(18083): at android.view.View.setBackgroundColor(View.java:7429) ERROR/AndroidRuntime(18083): at com.taprik.Remote.RemoteMain$4.acceptMessage(RemoteMain.java:202) ERROR/AndroidRuntime(18083): at com.illposed.osc.utility.OSCPacketDispatcher.dispatchMessage(Unknown Source) ERROR/AndroidRuntime(18083): at com.illposed.osc.utility.OSCPacketDispatcher.dispatchPacket(Unknown Source) ERROR/AndroidRuntime(18083): at com.illposed.osc.utility.OSCPacketDispatcher.dispatchBundle(Unknown Source) ERROR/AndroidRuntime(18083): at com.illposed.osc.utility.OSCPacketDispatcher.dispatchPacket(Unknown Source) ERROR/AndroidRuntime(18083): at com.illposed.osc.OSCPortIn.run(Unknown Source) ERROR/AndroidRuntime(18083): at java.lang.Thread.run(Thread.java:1096) WARN/ActivityManager(6722): Force finishing activity com.taprik.Remote/.RemoteMain