0

我希望我的AsyncTask班级从我的布局中更改 a 的可见性,但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) {

    }

}

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

4

1 回答 1

5

它崩溃是因为您UI后台 Thread进行操作。这是不允许的,你不能这样做。

my_text_view.setVisibility(View.VISIBLE);

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

这些方法专门用于实现您的目标:执行任何 UI 更新

当您想从 更新UIAsyncTask,您可以使用:

  • onPreExecute()
  • onProgressUpdate()
  • onPostExecute()
于 2013-03-05T20:23:52.747 回答