title: android textview does not show after setting visible from another thread
body: <p>I am having problems making my <code>TextViews</code> visible from another thread using the method <code>showDisclaimer()</code>. I have used <code>runOnUiThread()</code> to set the visibility of my <code>TextView</code>s. Basically, I want to show these views after importing the csv to the database. Can you take a look and see what I missed?</p>
  
  <pre class="lang-java prettyprint-override"><code>public class MainActivity extends Activity {
  
  final static int INDEX_ACCTTYPE = 0; 
  final static int INDEX_ECN = 1; 
  final static int INDEX_TLN = 2; 
  final static int INDEX_SIN = 3; 
  final static int INDEX_MOBILE = 4; 
  final static int INDEX_CITY = 5;
  final static int INDEX_START_DATE = 6;
  final static int INDEX_START_TIME = 7;
  final static int INDEX_END_DATE = 8; 
  final static int INDEX_END_TIME = 9; 
  final static int INDEX_REASON = 10;
  final static int INDEX_DETAILS = 11;
  
  DatabaseHandler db;
  String str;
  ProgressDialog pd;
  
  final private String csvFile = "http://www.meralco.com.ph/pdf/pms/pms_test.csv";
  final private String uploadDateFile = "http://www.meralco.com.ph/pdf/pms/UploadDate_test.txt";
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      TextView homeText1 = (TextView) findViewById(R.id.home_text1);
      TextView homeText2 = (TextView) findViewById(R.id.home_text2);
      TextView homeText3 = (TextView) findViewById(R.id.home_text3);
      TextView homeText4 = (TextView) findViewById(R.id.home_text4);
  
      homeText1.setVisibility(View.INVISIBLE);
      homeText2.setVisibility(View.INVISIBLE);
      homeText3.setVisibility(View.INVISIBLE);
      homeText4.setVisibility(View.INVISIBLE);
  
      //db = new DatabaseHandler(MainActivity.this);
  
      if(dbExists()){
          db = new DatabaseHandler(MainActivity.this);
          Log.d("Count", "" + db.count());
  
          if(!uploadDateEqualsDateInFile())
              promptOptionalUpdate("There is a new schedule");
          showDisclaimer();
          Log.i("oncreate", "finished!");
          return;
      }
  
      promptRequiredUpdate("Schedule not updated");
      //showDisclaimer();
      Log.i("oncreate", "finished!");
  
  }
  
  public void promptOptionalUpdate(String Message) {
      AlertDialog.Builder builder = new AlertDialog.Builder(
              this);
      builder.setMessage(Message)
              .setCancelable(false)
              .setPositiveButton("Update Now",
                      new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog, int id) {
                              Log.d("SHOW ALERT --&gt;!", "update");
                              dropOldSchedule();
                              triggerDownload();
                              dialog.cancel();
                          }
                      })
              .setNegativeButton("Later",
                      new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog, int id) {
                              Log.d("SHOW ALERT --&gt;!", "cancel");
                              dialog.cancel();
                          }
                      });
      AlertDialog alert = builder.create();
      alert.show();
  }
  
  public void dropOldSchedule(){
      //TODO drop old schedule
  }
  
  public void triggerDownload() {
  
      if (!checkInternet()) {
          showAlert("An internet connection is required to perform an update, please check that you are connected to the internet");
          return;
      }
  
      if(pd!=null &amp;&amp; pd.isShowing()) pd.dismiss();
      pd = ProgressDialog.show(this, "Downloading schedule", 
              "This may take a few minutes...", true, false);
  
      Thread thread = new Thread(new Runnable() {
  
          public void run() {
  
              db = new DatabaseHandler(MainActivity.this);
              db.beginTransaction();
  
              try {
                  URL myURL = new URL(csvFile);
  
                  BufferedReader so = new BufferedReader(new InputStreamReader(myURL.openStream()));
                  while (true) {
                      String output = so.readLine();
                      if (output != null) {
                          String[] sched = output.split(",");
                          try {
                              db.addRow(sched[INDEX_SIN], sched[INDEX_CITY], 
                                      sched[INDEX_START_DATE], sched[INDEX_START_TIME], 
                                      sched[INDEX_END_DATE], sched[INDEX_END_TIME], 
                                      sched[INDEX_DETAILS], sched[INDEX_REASON]);
                          } catch (IndexOutOfBoundsException e) {
                              db.addRow(sched[INDEX_SIN], sched[INDEX_CITY], 
                                      sched[INDEX_START_DATE], sched[INDEX_START_TIME], 
                                      sched[INDEX_END_DATE], sched[INDEX_END_TIME], 
                                      "", sched[INDEX_REASON]);
                              e.printStackTrace();
                          }
                      }
                      else {
                          break;
                      }
                  }
  
                  so.close();
              } catch (MalformedURLException e) {
                  e.printStackTrace();
                  db.endTransaction();
              } catch (IOException e) {
                  e.printStackTrace();
                  db.endTransaction();
              } 
              Log.d("Count", ""+db.count());
              db.setTransactionSuccessful();
              db.endTransaction();
  
              runOnUiThread(new Runnable() {
                  public void run() {
                      while (!pd.isShowing());
  
                      getUploadDate();
                      writeUploadDateInTextFile();
                      showDisclaimer();
  
                      pd.dismiss();
                  }
              });
          }
  
      });
      thread.start();
  
      //while(thread.isAlive());
  
      Log.d("triggerDownload", "thread died, finished dl. showing disclaimer...");
  
  }
  
  public void getUploadDate() {
      Log.d("getUploadDate", "getting upload date of schedule");
  
      if(pd!=null &amp;&amp; pd.isShowing()) pd.dismiss();
      pd = ProgressDialog.show(this, "Getting upload date", 
              "This may take a few minutes...", true, false);
  
      Thread thread = new Thread(new Runnable() {
  
          public void run() {
  
              try {
                  URL myURL = new URL(uploadDateFile);
  
                  BufferedReader so = new BufferedReader(new InputStreamReader(myURL.openStream()));
                  while (true) {
                      String output = so.readLine();
                      if (output != null) {
                          str = output;
                      }
                      else {
                          break;
                      }
                  }
              so.close();
              }
              catch (MalformedURLException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              } 
  
              runOnUiThread(new Runnable() {
                  public void run() {
                      while (!pd.isShowing());
                      pd.dismiss();
                  }
              });
          }
  
          });
      thread.start();
  
      while (thread.isAlive());
  
      Log.d("getUploadDate","thread died, upload date="+str);
  }
  
  public void writeUploadDateInTextFile() {
      Log.d("writeUploadDateTextFile", "writing:"+str);
  
      try {
          OutputStreamWriter out = new OutputStreamWriter(openFileOutput(
                  "update.txt", 0));
          out.write(str);
          out.close();
      } catch (java.io.IOException e) {
          e.printStackTrace();
      }
  }
  
  public void showDisclaimer() {
      Log.d("ShowDisclaimer", "showing disclaimer");
  
  
      TextView homeText1x = (TextView) findViewById(R.id.home_text1);
      TextView homeText2x = (TextView) findViewById(R.id.home_text2);
      TextView homeText3x = (TextView) findViewById(R.id.home_text3);
      TextView homeText4x = (TextView) findViewById(R.id.home_text4);
  
      homeText3x
      .setText("You may view the schedule of pre-arranged power interruptions by clicking any of these buttons : SIN, City or Date. " +
              "The schedule has been updated as of " + str
              + ". Meralco is exerting all efforts to restore electric service as scheduled." +
              " The schedule, however, may change without further notice. For verification, follow-ups, or " +
              "latest updates, please contact our CALL CENTER through telephone nos. 16211, " +
              "fax nos. 1622-8554/1622-8556 or email address callcenter.tech.assist@meralco.com.ph.");
  
  
      homeText1x.setVisibility(View.VISIBLE);
      homeText2x.setVisibility(View.VISIBLE);
      homeText3x.setVisibility(View.VISIBLE);
      homeText4x.setVisibility(View.VISIBLE);
  
      Log.d("ShowDisclaimer", "finished showing disclaimer");
  
  }
  
  public void promptRequiredUpdate(String Message) {
      Log.d("required update","required!");
      AlertDialog.Builder builder = new AlertDialog.Builder(
              this);
      builder.setMessage(Message)
      .setCancelable(false)
      .setPositiveButton("Update Now",
              new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {
              Log.d("SHOW ALERT --&gt;!", "update");
              triggerDownload();
              dialog.cancel();
          }
      })
      .setNegativeButton("Later",
          new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int id) {
                  Log.d("SHOW ALERT --&gt;!", "cancel");
                  dialog.cancel();
                  finish();
              }
      });
      AlertDialog alert = builder.create();
      alert.show();
  }
  
  public boolean uploadDateEqualsDateInFile() {
      Log.d("uploadDateEqualsDateInFile","comparing schedule upload dates");
  
      getUploadDate();
  
      try {
          String recordedDate = "";
          InputStream instream = openFileInput("update.txt");
          if (instream != null) { // if file the available for reading
              Log.d("uploadDateEqualsDateInFile","update.txt found!");
  
              InputStreamReader inputreader = new InputStreamReader(instream);
              BufferedReader buffreader = new BufferedReader(inputreader);
  
              String line = null;
              while ((line = buffreader.readLine()) != null) {
                  recordedDate = line;
                  Log.d("uploadDateEqualsDateInFile","recorded:"+recordedDate);
              }
  
              Log.d("uploadDateEqualsDateInFile","last upload date: " + str + ", recorded:" +recordedDate);
  
              if(str.equals(recordedDate)) return true;
              return false;
          }
          Log.d("uploadDateEqualsDateInFile","update.txt is null!");
          return false;
  
      } catch (FileNotFoundException e) {
          e.printStackTrace();
          return false;
  
      } catch (IOException e) {
          e.printStackTrace();
          return false;
      }
  
  }
  
  public void showAlert(String Message) {
      AlertDialog.Builder builder = new AlertDialog.Builder(getBaseContext());
      builder.setMessage(Message).setCancelable(false)
              .setNeutralButton("Ok", new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int id) {
                      dialog.cancel();
                  }
              });
      AlertDialog alert = builder.create();
      alert.show();
  }
  
  public boolean checkInternet() {
      ConnectivityManager cm = (ConnectivityManager) this
              .getSystemService(Context.CONNECTIVITY_SERVICE);
  
      NetworkInfo infos[] = cm.getAllNetworkInfo();
  
      for (NetworkInfo info : infos)
          if (info.getState() == NetworkInfo.State.CONNECTED
                  || info.getState() == NetworkInfo.State.CONNECTING) {
              return true;
          }
  
      return false;
  }
  
  public boolean dbExists() {
  
      File database=getApplicationContext().getDatabasePath(DatabaseHandler.DATABASE_NAME);
  
      if (!database.exists()) {
          Log.i("Database", "Not Found");
          return false;
      }
  
      Log.i("Database", "Found");
      return true;
  
  }
  
  @Override
  protected void onDestroy() {
      super.onDestroy();
      if (db != null) {
          db.close();
      }
  }
  @Override
  protected void onPause() {
      super.onPause();
      if (db != null) {
          db.close();
      }
  }
  </code></pre>
  
  <p>}</p>