您好我正在使用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 :(得分: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();