在Asynctask中定义新视图是未定义的-ANdroid

在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

我有一个Asynctask,它位于活动任务中。当我试图在Asynctask内部创建一个新视图时,它会给我一个错误,并说它未定义。下面是我的代码的基本内容

    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调用后台线程

相反,您可以在onProgressUpdateonPostExecuteonPreExecute中执行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);

        }
      }