2016-08-24 67 views
0

您好我正在使用android應用程序,我正在嘗試更改線程中的屏幕,並且出現以下錯誤 「只有創建視圖層次結構的原始線程可以觸及其視圖「請檢查一下我的代碼,並告訴我一個方法來克服這個錯誤如何更改線程內的視圖

Runnable runnable = new Runnable() { 
     public void run() { 
      Users user = mapper.load(Users.class,username); 

      System.out.println(user.getPassword()); 
      System.out.println(username); 
      if (user != null && user.getPassword().equals(password)){ 
       //System.out.println("Correct"); 

       setContentView(R.layout.activity_account); 
      } 
+0

您可以嘗試runOnUIThread – Chol

回答

1

您可以使用runOnUiThread:

runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
          setContentView(R.layout.activity_account); 
         } 
        }); 
+0

感謝它的工作原理:) –

0

您可以使用runOnUIThread() - 見docs

在UI線程上運行指定的操作。如果當前線程是UI線程,那麼該動作立即執行。如果當前線程不是UI線程,則該操作將被髮布到UI線程的事件隊列中。

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     setContentView(R.layout.activity_account); 
    } 
}); 
0

你必須做UIThread象下面這樣:

new AsyncTask<Void, Void, Boolean>() { 
     @Override 
     protected Boolean doInBackground(Void... params) { 
      Users user = mapper.load(Users.class,username); 

      System.out.println(user.getPassword()); 
      System.out.println(username); 
      return user != null && user.getPassword().equals(password); 
     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      if (result){ 
       setContentView(R.layout.activity_account); 
      } 
     } 
    }.execute();