Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使文本视图在异步任务启动时可见_Android_Asynchronous_Textview_Task_Show - Fatal编程技术网

Android 使文本视图在异步任务启动时可见

Android 使文本视图在异步任务启动时可见,android,asynchronous,textview,task,show,Android,Asynchronous,Textview,Task,Show,我想让我的AsyncTask类从我的布局中更改TextView的可见性,我得到了一个致命错误。如果我想获取TextView的文本值,它可以正常工作,但是当试图设置可见性时,它就会崩溃 // Main Activity (MainActivity.java) Context MainContext= getApplicationContext(); new MyAsyncTask((TextView)findViewById(R.id.my_text_view)).execute(); // M

我想让我的
AsyncTask
类从我的布局中更改
TextView
的可见性,我得到了一个致命错误。如果我想获取
TextView
的文本值,它可以正常工作,但是当试图设置可见性时,它就会崩溃

// Main Activity (MainActivity.java)
Context MainContext= getApplicationContext();
new MyAsyncTask((TextView)findViewById(R.id.my_text_view)).execute();

// My Async Task (MyAsyncTask.java)
public class MyAsyncTask extends AsyncTask <String, Void, String> {
    private Context context;
private TextView my_text_view;

public MyAsyncTask (TextView my_text_view){
        this.context = MainActivity.MainContext;
    this.txt_loading = my_text_view;
}

@Override
protected String doInBackground(String... params) {
    // TODO Auto-generated method stub
    my_text_view.setVisibility(View.VISIBLE); // crashes
    Log.i("Value: ", String.valueOf(this.my_text_view.getText())); // O.K.!
    return null;
}

@Override
    protected void onPostExecute(String result) {

    }

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected void onProgressUpdate(Void... values) {

    }

}
//主活动(MainActivity.java)
Context MainContext=getApplicationContext();
新建MyAsyncTask((TextView)findViewById(R.id.my_text_view)).execute();
//我的异步任务(MyAsyncTask.java)
公共类MyAsyncTask扩展了AsyncTask{
私人语境;
私有文本视图我的文本视图;
公共MyAsyncTask(文本视图我的文本视图){
this.context=MainActivity.MainContext;
this.txt_load=我的_文本_视图;
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
//TODO自动生成的方法存根
my_text_view.setVisibility(view.VISIBLE);//崩溃
Log.i(“Value:,String.valueOf(this.my_text_view.getText());//好。!
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
}
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的void onProgressUpdate(void…值){
}
}

我怎样才能让它工作?另外,我可以从上下文中获取
TextView
?我不想将其作为参数发送给构造函数。

它崩溃,因为您正在后台线程中操纵
UI
。这是不允许的,你不能这样做

my_text_view.setVisibility(View.VISIBLE);
用户界面只能从原始/main/UI
线程更新/更改。AsyncTask提供了一些在UI
线程上实际运行的方法

这些方法完全是为实现您的目标而指定的:执行任何UI更新

当您想从
AsyncTask
更新
UI
时,可以使用:

  • onPreExecute()
  • onProgressUpdate()
  • onPostExecute()

它崩溃是因为您正在后台线程中操纵
UI
。这是不允许的,你不能这样做

my_text_view.setVisibility(View.VISIBLE);
用户界面只能从原始/main/UI
线程更新/更改。AsyncTask提供了一些在UI
线程上实际运行的方法

这些方法完全是为实现您的目标而指定的:执行任何UI更新

当您想从
AsyncTask
更新
UI
时,可以使用:

  • onPreExecute()
  • onProgressUpdate()
  • onPostExecute()

方法
doInBackground
在与UI不同的线程中运行,因此无法更新UI。使用空的
onPreExecute
方法设置可见性
my\u text\u view.setVisibility(view.VISIBLE)。此方法在UI线程上运行。方法
doInBackground
在与UI不同的线程中运行,因此无法更新UI。使用空的
onPreExecute
方法设置可见性
my\u text\u view.setVisibility(view.VISIBLE)。此方法在UI线程上运行。谢谢!第二个问题:我可以从上下文中获取TextView吗?类似于
context.get?????From()
?我建议您通过AsyncTask类的构造函数传递TextView对象(如果您将其作为单独的类使用)。如果您将AsyncTask作为活动类中的内部类,这样您就可以正常地使用它进行访问,但它只能在方法中更改。好的。谢谢这是因为我有更多的元素需要更改
onPostExecute()
。因此,您可以通过构造函数传递这些元素,或者在您的情况下,使用AsyncTask作为内部类,然后您可以访问所有UI小部件等。我同意您的观点@sajmon\u d。但我想从阿里那里知道以下内容,服务构造函数来自哪里??其次,您的
my\u text\u视图
甚至还没有初始化,而且
txt.加载
定义在哪里?谢谢!第二个问题:我可以从上下文中获取TextView吗?类似于
context.get?????From()
?我建议您通过AsyncTask类的构造函数传递TextView对象(如果您将其作为单独的类使用)。如果您将AsyncTask作为活动类中的内部类,这样您就可以正常地使用它进行访问,但它只能在方法中更改。好的。谢谢这是因为我有更多的元素需要更改
onPostExecute()
。因此,您可以通过构造函数传递这些元素,或者在您的情况下,使用AsyncTask作为内部类,然后您可以访问所有UI小部件等。我同意您的观点@sajmon\u d。但我想从阿里那里知道以下内容,服务构造函数来自哪里??其次,您的
my\u text\u视图
甚至没有初始化,而且
txt.loading在哪里定义了??