LlamadoFromWrongThreadException

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ThraedDemo objDemo = new ThraedDemo(); Thread objThread = new Thread() { @Override public void run() { objDemo.firstMethod(); } }; objThread.start(); } class ThraedDemo { private void firstMethod() { Thread objThread = new Thread() { @Override public void run() { try { ((ImageView)findViewById(R.id.ImageViewnumber)).setImageResource(nums[n]); Thread.sleep(10000); Log.v("Thread","1111111111111111sleep"); } catch (InterruptedException ex) { System.out.println("interuped exception" + ex.getMessage()); } secondMethod(); } private void secondMethod() { Thread objThread = new Thread() { @Override public void run() { try { ((ImageView)findViewById(R.id.ImageViewResult)).setImageResource(nums[n+1]); n++; Thread.sleep(10000); Log.v("Thread","22222222222 sleep"); } catch (InterruptedException ex) { System.out.println("interuped exception" + ex.getMessage()); } firstMethod(); } }; objThread.start(); } }; objThread.start(); } } 

Utilizo el código anterior pero no está en ejecución. Recibí una CalledFromWrongThreadException ¿ CalledFromWrongThreadException es el problema en el código anterior? Por favor, dame algunas sugerencias. Gracias de antemano

Creo que no puede ver las modificaciones de otro subproceso que el subproceso de la interfaz de usuario, por lo tanto, cree controladores en el proceso de creación y publíquelo, o utilice AsyncTask o el método runOnUIThread para enviar porciones de código directamente al subproceso de la interfaz de usuario.

Edité tu segundo código de función, veo que tu código es un bucle para siempre porque el primer método llama a SecondMethod y el segundo método llama al nuevo firstMethod para iniciar y luego repetir el ciclo para siempre. Lo eliminé y moví el código de actualización de ImageView en el subproceso de la interfaz de usuario, podría intentar esto:

 class ThraedDemo { private void firstMethod() { Thread objThread = new Thread() { @Override public void run() { try { runOnUiThread(new Runnable() { public void run(){ ((ImageView)findViewById(R.id.ImageViewnumber)).setImageResource(nums[n]); } }); Thread.sleep(10000); Log.v("Thread","1111111111111111sleep"); } catch (InterruptedException ex) { System.out.println("interuped exception" + ex.getMessage()); } secondMethod(); } }; objThread.start(); } private void secondMethod() { Thread objThread2 = new Thread() { @Override public void run() { try { runOnUiThread(new Runnable() { public void run(){ ((ImageView)findViewById(R.id.ImageViewnumber)).setImageResource(nums[n+1]); } }); n++; Thread.sleep(10000); Log.v("Thread","22222222222 sleep"); } catch (InterruptedException ex) { System.out.println("interuped exception" + ex.getMessage()); } } }; objThread2.start(); } }