2016-08-24 19 views
0

こんにちは私はアンドロイドアプリケーションで作業しています。スレッド内の画面を変更しようとしていて、次のエラーが表示されます "ビュー階層を作成した元のスレッドのみが、 「スレッド内のビューを変更する方法

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スレッドのイベントキューにポストされます。あなたは以下のようにUIThreadにしなければならない

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

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(); 
関連する問題