Erro gerado na classe AsyncTasc

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?

Você não pode atualizar a tela no doInBackground.

Use publishProgress e onProgressUpdate.
Bem como mostra aqui:
http://developer.android.com/reference/android/os/AsyncTask.html

Conforme o fabiofalci disse:

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, String, 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++) {
                                publishProgress(new String[]{String.valueOf(x)});
				Log.e("Teste", String.valueOf(x));
			}
			
			return null;
		}

                public void onProgressUpdate(String... progress){
               		tvTeste.append(progress[0]);
                }
		
		@Override
		protected void onPostExecute(Void result) {
			progressDialog.dismiss();
			Toast.makeText(TesteComAsyncTask.this, "Finalizando a operação", Toast.LENGTH_LONG).show();
		}
		
	}
}

Muito obrigado fabio e mark, entendi.

Abraço.