添加TextView时CalledFromWrongThreadException

时间:2012-10-19 11:39:24

标签: android multithreading handler

我已经实现了一个自定义相机,我希望它在一段时间后进入待机状态。备用站点来自stopPreview,摄像机释放和一个视图,告诉用户点击以退出待机状态。因为我在新线程中设置了文本,所以我得到了CalledFromWrongThreadException,但我不知道解决方案是什么。我找到了其他帖子,但没有一个真的有效。

代码:

    private void initCamera()
        {//more code


                threadModifiedText = (TextView) findViewById(R.id.textView1);
                Thread standbyThread = new Thread()
                {
                    @Override
                    public void run()
                    {
                        try
                        {

                            while (timeCounter > 0)
                            {
                                if (!activeThread)
                                {
                                    sleep(100);
                                    if (timeCounter % 10 == 0)
                                    {
                                        threadHandler.sendEmptyMessage((int) timeCounter / 10);
                                    }
                                    timeCounter--;
                                }
                            }
                        }
                        catch (InterruptedException e)
                        {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        mCamera.stopPreview();
                        mCamera.release();
                        TextView standbytext = new TextView(SlicesActivity.this);
                        standbytext.setText("Tap to exit standby mode");
                        FrameLayout preview = (FrameLayout) findViewById(id.FrameLayout_camera_preview);
                        preview.addView(standbytext);

                    }
                };
                standbyThread.start();

//more code}

    @Override
    public void onUserInteraction()
    {
        Log.d("~~~~~~~~~", "apasat");
        activeThread = true;
            timerCounter = 300;


    }

    private Handler threadHandler = new Handler()
    {
        public void handleMessage(android.os.Message msg)
        {
            // whenever the Thread notifies this handler we have
            // only this behavior
            threadModifiedText.setText("\ncounter is " + Integer.toString(msg.what));
        }
    };

请大家,给我一些建议。 10X

2 个答案:

答案 0 :(得分:1)

尝试使用

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // TODO: update your UI here
        }
    });

在你的线程中更新UI

答案 1 :(得分:1)

除UI线程外,您无法在任何线程内设置文本值。完成后台线程操作,并在操作结束后在UI线程中设置文本值。