我希望我的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) {
}
}
的文本值,它可以正常工作,但在尝试设置可见性时它只会崩溃。
TextView
我怎样才能让它发挥作用?另外,我可以从上下文中获取{{1}}吗?我不想将它作为参数发送给构造函数。
答案 0 :(得分:4)
崩溃是因为你在后台线程中使用UI
进行操作。这是不允许的,你不能这样做。
my_text_view.setVisibility(View.VISIBLE);
用户界面只能从原始/主要/用户界面Thread
更新/更改。 AsyncTask提供了一些实际在UI Thread
上运行的方法。
这些方法完全用于实现您的目标:执行任何UI更新。
如果您想从UI
更新AsyncTask
,可以使用: