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从上下文中获取吗?我不想将其作为参数发送给构造函数。
由于您UI在后台Thread中进行操作而导致崩溃。这是不允许的,您不能这样做。
my_text_view.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)
用户界面只能从原始/主/ UI进行更新/更改Thread。AsyncTask提供了一些实际上可以在UI上运行的方法Thread。
这些方法是为了实现您的目标而专门指定的:执行任何UI更新。
如果UI要从更新AsyncTask,可以使用: