I am facing some problems trying to call main thread in my background thread.
Based on this post: Running code in main thread from another thread
The solution should be:
private void runOnMainThread() {
    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            // Do something
            ottoBus.post(new MyObjectEvent(mMyObject));
            // End do something
            mMyObject = null;
        }
    });
}
However my background thread is still being able to read Bluetooth socket data between "Do something" and "End do something"
What am I missing here? Is it possible to lock the background thread, while "Do something" is being executed?
My code for reading socket data is following:
InputStream stream = null;
InputStreamReader reader = null;
BufferedReader bufferedReader = null;
String data = "";
try {
    stream = mSocket.getInputStream();
    byte[] bytes = new byte[20];
    int numRead = 0;
    while ((numRead = stream.read(bytes)) >= 0) {
        String s = new String(bytes, 0, numRead);
        if (mMyObject != null) {
            fillData(s); // Can cause NPE
        } else {
            mMyObject = new MyObject();
            fillData(s);
        }
        // This should be synchronised call
        runOnMainThread();
Thanks.
 
     
     
     
    