启动AsyncTask时使TextView可见

ali*_*ali 0 android asynchronous task show textview

我希望我的AsyncTask班级TextView从布局中更改a的可见性,但出现致命错误。如果我想获取的文本值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) {

    }

}
Run Code Online (Sandbox Code Playgroud)

我该如何运作?另外,我可以TextView从上下文中获取吗?我不想将其作为参数发送给构造函数。

Sim*_*iak 5

由于您UI后台Thread中进行操作而导致崩溃。这是不允许的,您不能这样做。

my_text_view.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)

用户界面只能从原始/主/ UI进行更新/更改Thread。AsyncTask提供了一些实际上可以在UI上运行的方法Thread

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

如果UI要从更新AsyncTask,可以使用:

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