如何在一个线程中更改视图

时间:2016-08-24 10:05:32

标签: java android multithreading

您好我正在使用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);
            }

3 个答案:

答案 0 :(得分:1)

您可以使用runOnUiThread:

runOnUiThread(new Runnable() {

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

答案 1 :(得分:0)

您可以使用runOnUIThread() - 请参阅docs

  

在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则该操作将发布到UI线程的事件队列中。

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

答案 2 :(得分: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();