title: Android:android.view.ViewRoot$CalledFromWrongThreadException - How to solve the problem?
body: <p>An application I am currently developing is communicating with the server and the communication process runs in its own thread. There are asynchronous calls - for example login() and onLoginResponse().</p>
  
  <p>login() is called in the main activity and the response is handled in main activity as well (onLoginResponse()). In onLoginResponse() method there is updateGUIState() method which modifies layout elements:</p>
  
  <pre><code>private void updateGUIState() {
  
      Log.i(TAG, "executing updateGUIState");
  
      arrangeLayoutElements();
      txtTime.setText(mStrRecordingTime);
      if (settings.isRecording()) {
          //btnAction.setText("Stop");
          btnAction.setImageResource(R.drawable.button_stop);
      } else {
          //btnAction.setText("Capture");
          btnAction.setImageResource(R.drawable.button_record);
      }
  
      //set privacy level text
      if (settings.getPrivacyLevel() == 0) {
          txtPrivacyLevel.setText("Private");
      } else if (settings.getPrivacyLevel() == 1) {
          txtPrivacyLevel.setText("Public");
      }
  
      if (settings.isMute()) {
          muteIcon.setIconImage(R.drawable.ic_volume_off_small);
      } else {
          muteIcon.setIconImage(R.drawable.ic_volume_small);
      }
  
      if (mIsUploading) {
          txtUploadingText.setVisibility(View.VISIBLE);
          uploadingProgressBar.setVisibility(View.VISIBLE);
      } else {
          txtUploadingText.setVisibility(View.INVISIBLE);
          uploadingProgressBar.setVisibility(View.INVISIBLE);
      }
  
      if (mEncoderConnection != null) {
          txtConnectionStatus.setText("Connected");
      } else {
          txtConnectionStatus.setText("Disconnected");
      }
  }
  </code></pre>
  
  <p>When the execution reaches this method (when called from onLoginResponse()) the application crashes and the log displays the following message:</p>
  
  <blockquote>
    <p>android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.</p>
  </blockquote>
  
  <p>Does anyone know how it is possible to modify the logic in order to switch to appropriate thread before modifying the layout and fix the problem?</p>
  
  <p>Thanks!</p>