我正在Android Studio中创建一个项目,在某个地方我必须使用AsyncTask,但是当我尝试在尝试捕获中设置setText时,我得到了一个错误:“方法setText()必须从UI线程调用,当前推断的线程是worker” 该怎么办? 这是我的代码的一些印刷品:
答案 0 :(得分:0)
如果您尝试在单独的线程上更新任何UI组件,则会出现该错误。我有一个帮助程序函数,可用于在UI线程上运行特定内容,这是重要的一点:
Handler mainHandler = new Handler(Looper.getMainLooper());
mainHandler.post(new Runnable() {
@Override
public void run() {
txt_Error.setText("Sorry!! Incorrect Username or Password");
}
});
答案 1 :(得分:0)
该错误表明您无法在此处调用txt_Error.setText()
方法,因为AsyncTask DoInBackGround 在后台运行,也就是说,txt_Error.setText()
方法只能从以下位置调用IU线程。
您可以做的是在 DoInBackground 中调用此方法publishProgress(2 parameter);
,然后在AsyncTask中按 ALT + O 添加此方法onProgressUpdate(2 parameter)
。
onProgressUpdate(2 parameter)
方法在主线程或IU线程中运行,因此每次您在 DoInBackground 中调用publishProgress(2 parameter);
时,都会触发onProgressUpdate()
。>
另一个重要的事情是,publishProgress(2 parameter);
方法send和onProgressUpdate(2 parameter)
方法获取您在private class validateUserTask extends AsyncTask <1 parameter, 2 parameter, 3 parameter>
开头建立的第二个参数。
示例:
new AsyncTask<Integer,String,Void>(){
@Override
protected Void doInBackground(Integer... integers) {
*can call this method wherever you want here*
publishProgress(string);
return null;
}
@Override
protected void onProgressUpdate(final String... values) {
text.setText(values[0]);
}
}.execute();
注意:我只是用一种方法来做AsyncTask ...(更容易)