-1

我正在尝试使用setContentView方法将我的观点带到前面,但是在这样做时我收到了这个错误。

从这里搜索类似的问题我发现这个错误通常是在尝试获取/设置布局视图对象的值时导致的,例如没有实例化它,但这里不是这种情况,我什至无法设置视图。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ticker);
    Thread tmr = new Thread() {
        public void run() {
            try {
                sleep(1000);
            } catch (InterruptedException iEx) {
                iEx.printStackTrace();
            } finally {
                User usrObj = new User();
                if (usrObj.authenticateUser()) {

                    Intent mainActivity = new Intent(
                            "android.intent.action.Homeview");
                    startActivity(mainActivity);
                } else {
                    setContentView(R.layout.login); // <- ERROR
                    activateLogin();
                }
            }
        }

    };
    tmr.start();

}
4

2 回答 2

1

您需要调用runOnUiThread从线程更改布局。

runOnUiThread(new Runnable() {
    @Override
    public void run() { 
        User usrObj = new User();
        if (usrObj.authenticateUser()) {
            Intent mainActivity = new Intent("android.intent.action.Homeview");
            startActivity(mainActivity);
        } else {
            setContentView(R.layout.login); // <- ERROR
            activateLogin();
        }
    }
});

作为旁注,请确保您不要对字符串进行硬编码,以避免出现拼写错误。-

Intent mainActivity = new Intent(YourActivity.this, android.intent.action.Homeview.class);
于 2013-10-27T11:10:55.630 回答
1

您正在从非 UI 线程调用 setContentView(...) 。将其移至主(UI)线程或将该单个调用包装在:

runOnUIThread(new Runnable() {
    @Override
    public void run() {
        setContentView(R.layout.login);
    }
});
于 2013-10-27T11:12:31.363 回答