Olá pessoal, tudo bem?
Estou recebendo um erro quando eu tento acessar um componente gráfico dentro de uma classe AsyncTask:
O erro está sendo gerado na linha que eu tento fazer o append():
tvTeste.append(String.valueOf(x));
Erro completo:
05-29 11:02:24.745: E/AndroidRuntime(4007): FATAL EXCEPTION: AsyncTask #1
05-29 11:02:24.745: E/AndroidRuntime(4007): java.lang.RuntimeException: An error occured while executing doInBackground()
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.os.AsyncTask$3.done(AsyncTask.java:200)
05-29 11:02:24.745: E/AndroidRuntime(4007): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
05-29 11:02:24.745: E/AndroidRuntime(4007): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
05-29 11:02:24.745: E/AndroidRuntime(4007): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
05-29 11:02:24.745: E/AndroidRuntime(4007): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-29 11:02:24.745: E/AndroidRuntime(4007): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
05-29 11:02:24.745: E/AndroidRuntime(4007): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
05-29 11:02:24.745: E/AndroidRuntime(4007): at java.lang.Thread.run(Thread.java:1096)
05-29 11:02:24.745: E/AndroidRuntime(4007): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.view.ViewRoot.checkThread(ViewRoot.java:2812)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.view.ViewRoot.invalidateChild(ViewRoot.java:607)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:633)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2505)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.view.View.invalidate(View.java:5139)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.widget.TextView.updateAfterEdit(TextView.java:4738)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.widget.TextView.handleTextChanged(TextView.java:6162)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6320)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:259)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.text.SpannableStringBuilder.append(SpannableStringBuilder.java:28)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.widget.TextView.append(TextView.java:2240)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.widget.TextView.append(TextView.java:2227)
05-29 11:02:24.745: E/AndroidRuntime(4007): at errogeradonoasynctask.TesteComAsyncTask$Operacoes.doInBackground(TesteComAsyncTask.java:44)
05-29 11:02:24.745: E/AndroidRuntime(4007): at errogeradonoasynctask.TesteComAsyncTask$Operacoes.doInBackground(TesteComAsyncTask.java:1)
05-29 11:02:24.745: E/AndroidRuntime(4007): at android.os.AsyncTask$2.call(AsyncTask.java:185)
05-29 11:02:24.745: E/AndroidRuntime(4007): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-29 11:02:24.745: E/AndroidRuntime(4007): ... 4 more
05-29 11:02:31.565: E/WindowManager(4007): Activity errogeradonoasynctask.TesteComAsyncTask has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44a6f350 that was originally added here
05-29 11:02:31.565: E/WindowManager(4007): android.view.WindowLeaked: Activity errogeradonoasynctask.TesteComAsyncTask has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44a6f350 that was originally added here
05-29 11:02:31.565: E/WindowManager(4007): at android.view.ViewRoot.<init>(ViewRoot.java:247)
05-29 11:02:31.565: E/WindowManager(4007): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
05-29 11:02:31.565: E/WindowManager(4007): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
05-29 11:02:31.565: E/WindowManager(4007): at android.view.Window$LocalWindowManager.addView(Window.java:424)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.Dialog.show(Dialog.java:241)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.ProgressDialog.show(ProgressDialog.java:107)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.ProgressDialog.show(ProgressDialog.java:90)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.ProgressDialog.show(ProgressDialog.java:85)
05-29 11:02:31.565: E/WindowManager(4007): at errogeradonoasynctask.TesteComAsyncTask$Operacoes.onPreExecute(TesteComAsyncTask.java:36)
05-29 11:02:31.565: E/WindowManager(4007): at android.os.AsyncTask.execute(AsyncTask.java:391)
05-29 11:02:31.565: E/WindowManager(4007): at errogeradonoasynctask.TesteComAsyncTask.onCreate(TesteComAsyncTask.java:28)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-29 11:02:31.565: E/WindowManager(4007): at android.os.Handler.dispatchMessage(Handler.java:99)
05-29 11:02:31.565: E/WindowManager(4007): at android.os.Looper.loop(Looper.java:123)
05-29 11:02:31.565: E/WindowManager(4007): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-29 11:02:31.565: E/WindowManager(4007): at java.lang.reflect.Method.invokeNative(Native Method)
05-29 11:02:31.565: E/WindowManager(4007): at java.lang.reflect.Method.invoke(Method.java:521)
05-29 11:02:31.565: E/WindowManager(4007): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
05-29 11:02:31.565: E/WindowManager(4007): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
05-29 11:02:31.565: E/WindowManager(4007): at dalvik.system.NativeStart.main(Native Method)
Código:
public class TesteComAsyncTask extends Activity {
private TextView tvTeste;
private ProgressDialog progressDialog;
/**
* @see android.app.Activity#onCreate(Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.teste_asynctask);
tvTeste = (TextView)findViewById(R.id.tvTeste);
new Operacoes().execute();
}
private class Operacoes extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(TesteComAsyncTask.this, getString(R.string.app_name), "imprimindo os valores");
progressDialog.setCancelable(true);
}
@Override
protected Void doInBackground(Void... params) {
for (int x = 0; x < 10000; x++) {
tvTeste.append(String.valueOf(x));
Log.e("Teste", String.valueOf(x));
}
return null;
}
@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();
Toast.makeText(TesteComAsyncTask.this, "Finalizando a operação", Toast.LENGTH_LONG).show();
}
}
}
Alguém poderia por favor me dar uma luz?