title: Only the original thread that created a view hierarchy can touch its views. On android
body: <p>I'm only a beginner so please forgive me for asking possibly a stupid question</p>
  
  <hr>
  
  <p>I don't understand the meaning of Only the original thread that created a view hierarchy can touch its views.</p>
  
  <p>Please can someone teach me why this error is occurring and how to solve this problem.</p>
  
  <p>ThankYou</p>
  
  <p>This is my class</p>
  
  <pre><code>public class MainActivity extends Activity {
      TextView title;
      Random   random  = new Random();
      int      counter = 1;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.startup);
          startingUp();
      }
  
      private void startingUp() {
          Thread timer = new Thread() { //new thread         
              public void run() {
                  Boolean b = true;
                  try {
                      do {
                          counter++;
                          title();
                          sleep(1000);
                          title.clearComposingText();
  
                      }
                      while (b == true);
                  } catch (IntruptedException e) {
                      e.printStackTrace();
                  }
                  finally {
                  }
              };
          };
          timer.start();
      }
  
      public void title() {
          title = (TextView) findViewById(R.id.tvTitle);
          switch (random.nextInt(2)) {
              case 0:
                  title.setGravity(Gravity.RIGHT);
                  break;
              case 1:
                  title.setGravity(Gravity.CENTER);
                  break;
              case 2:
                  title.setGravity(Gravity.LEFT);
                  break;
          }
          title.setTextColor(Color.rgb(random.nextInt(250), random.nextInt(250), random.nextInt(250)));
          title.setTextSize(random.nextInt(55) + 10);
      }
  }
  </code></pre>
  
  <p>And this is my LogCat</p>
  
  <pre><code>02-20 10:53:19.293: I/Adreno200-EGLSUB(5816): &lt;ConfigWindowMatch:2078&gt;: Format RGBA_8888.
  02-20 10:53:19.303: D/memalloc(5816): /dev/pmem: Mapped buffer base:0x5c914000 size:14135296 offset:10366976 fd:64
  02-20 10:53:19.303: E/(5816): Can't open file for reading
  02-20 10:53:19.303: E/(5816): Can't open file for reading
  02-20 10:53:19.303: D/OpenGLRenderer(5816): Enabling debug mode 0
  02-20 10:53:19.373: D/memalloc(5816): /dev/pmem: Mapped buffer base:0x5db58000 size:3768320 offset:0 fd:67
  02-20 10:53:20.143: W/dalvikvm(5816): threadid=11: thread exiting with uncaught exception (group=0x40abc210)
  02-20 10:53:20.143: E/AndroidRuntime(5816): FATAL EXCEPTION: Thread-3102
  02-20 10:53:20.143: E/AndroidRuntime(5816): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
  02-20 10:53:20.143: E/AndroidRuntime(5816):     at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039)
  02-20 10:53:20.143: E/AndroidRuntime(5816):     at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:722)
  02-20 10:53:20.143: E/AndroidRuntime(5816):     at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:771)
  02-20 10:53:20.143: E/AndroidRuntime(5816):     at android.view.ViewGroup.invalidateChild(ViewGroup.java:4112)
  02-20 10:53:20.143: E/AndroidRuntime(5816):     at android.view.View.invalidate(View.java:8639)
  02-20 10:53:20.143: E/AndroidRuntime(5816):     at android.view.View.invalidate(View.java:8590)
  02-20 10:53:20.143: E/AndroidRuntime(5816):     at android.widget.TextView.setGravity(TextView.java:2538)
  02-20 10:53:20.143: E/AndroidRuntime(5816):     at com.example.saikoro.MainActivity.title(MainActivity.java:58)
  02-20 10:53:20.143: E/AndroidRuntime(5816):     at com.example.saikoro.MainActivity$1.run(MainActivity.java:36)
  </code></pre>