在Asynctask中定义新视图是未定义的-ANdroid
我有一个Asynctask,它位于活动任务中。当我试图在Asynctask内部创建一个新视图时,它会给我一个错误,并说它未定义。下面是我的代码的基本内容在Asynctask中定义新视图是未定义的-ANdroid,android,view,android-asynctask,Android,View,Android Asynctask,我有一个Asynctask,它位于活动任务中。当我试图在Asynctask内部创建一个新视图时,它会给我一个错误,并说它未定义。下面是我的代码的基本内容 public class DashboardActivity extends Activity { class loadComments extends AsyncTask<String, String, String> { @Override
public class DashboardActivity extends Activity {
class loadComments extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
@Override
protected String doInBackground(String... params) {
LinearLayout commentBox = new LinearLayout(this);
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}// end asynctask
}//end activity
公共类仪表板活动扩展活动{
类loadComments扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
LinearLayout commentBox=新的LinearLayout(此);
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
}
}//结束异步任务
}//结束活动
当我尝试创建linearLayout或任何类型的视图时,会发生错误。我试着去掉(这个)语句,把代码放在所有地方。你不能这样做
LinearLayout commentBox = new LinearLayout(this);
在UI线程中执行此操作,意味着将其移到doInBackground()之外。不应在AsyncTask的doInBackground中执行任何UI操作,而在UI线程之外,doInBackground调用后台线程 相反,您可以在onProgressUpdate、onPostExecute和onPreExecute中执行UI操作
有关更多信息,请参阅在后台线程上运行的doInbackground。因此,您无法从后台线程访问/更新ui。您可以在ui线程上更新ui “只有创建视图层次结构的原始线程才能接触其视图。” 如果从后台线程更新ui,您将看到上述消息 在ui线程上调用
onPreExecute
和onPostExecute
。您可以在doInBackground中返回结果,并在onPostExecute中更新ui。doInbackground计算的结果是onPostExecute的一个参数
既然你有这个
LinearLayout commentBox = new LinearLayout(this);
此
不涉及您案例中的活动上下文。即使使用活动上下文并初始化线性布局,也需要将其添加到根布局中
公共类仪表板活动扩展活动{
线性布局;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
布局=新的线性布局(本);
setContentView(布局);
new loadComments().execute(参数);
}
类loadComments扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
}
}
您需要活动上下文LinearLayout commentBox=new LinearLayout(DashboardActivity.this)
。将其移到doInbackground
之外。此外,您没有setContentView(R.ayout.mylayout)
。您的异步任务未被调用。您不能调用new loadComments().execute()
。
public class DashboardActivity extends Activity {
LinearLayout layout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
layout = new LinearLayout(this);
setContentView(layout);
new loadComments().execute(params);
}
class loadComments extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
@Override
protected String doInBackground(String... params) {
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}