Android – ViewRootImpl $ CalledFromWrongThreadException
Yo estaba usando esto , para mostrar las imágenes de Internet, pero arroja un error como a continuación:
$ CalledFromWrongThreadException: Sólo el subproceso original que creó una jerarquía de vistas puede tocar sus vistas.
public class Order extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new DownloadFilesTask().execute(); } private class DownloadFilesTask extends AsyncTask<Void, Void, Void> { protected void onPostExecute(Void result) { } @Override protected Void doInBackground(Void... params) { setContentView(R.layout.order); ImageView imageView = (ImageView)findViewById(R.id.imgView); imageView.setImageDrawable(createDrawableFromURL("http://savagelook.com/misc/sl_drop2.png")); return null; } } private Drawable createDrawableFromURL(String urlString) { Drawable image = null; try { URL url = new URL(urlString); InputStream is = (InputStream)url.getContent(); image = Drawable.createFromStream(is, "src"); } catch (MalformedURLException e) { image = null; } catch (IOException e) { image = null; } return image; } }
- ¿Cómo mostrar una imagen de blob en Android?
- Gire la vista de imagen alrededor de su centro sin cortar sus bordes
- La aplicación se bloquea al agregar un ImageView
- Cómo crear una imagen giratoria controlada por gestos para una interfaz de usuario
- SetImageBitmap no tiene efecto visible
- Cómo obtener la imagen de sdcard en android?
- ¿Por qué ImageXX getX, getY, setX y setY no representan el valor real en el Layout Relativo?
- ¿Cuál es la diferencia entre ImageView.ScaleType.CENTER_INSIDE y FIT_CENTER?
- Crear diseño de las imágenes sin asignarlas layoutparams estáticos en android
- Cómo poner vistas en la parte superior de un ImageView, en relación con el tamaño del contenido de ImageView?
- Establecer vista de imagen después del cambio de orientación
- Imagen de Android que fija el tamaño de la imagen
- Android ImageView no está mostrando la imagen?
Poner esto en onCreate()
ImageView imageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.order); imageView = (ImageView)findViewById(R.id.imgView); new DownloadFilesTask().execute(); }
Y su clase AsyncTask
debe ser así,
private class DownloadFilesTask extends AsyncTask<Void, Void, Void> { Drawable drawable; @Override protected Void doInBackground(Void... params) { drawable = createDrawableFromURL( "http://savagelook.com/misc/sl_drop2.png"); return null; } protected void onPostExecute(Void result) { imageView.setImageDrawable(drawable); } }
Tengo el mismo problema tratando de cambiar la vista de interfaz de usuario de c + + utilizando JNI. La solución fue usar
runOnUiThread(new Runnable() { public void run(){ } });
RunOnUiThread es un método Activity por lo que tengo que hacer mi instancia de actividad pública estática para poder llamar a mi método estático público que más tarde llamar desde JNI.
Espero que esto ayude a otros 🙂
PS: desde aquí aprendo a usar JNI http://www.cocos2d-x.org/projects/cocos2d-x/wiki/How_to_use_jni para mi juego de Android previamente realizado con cocos2dx
Creo que esta línea está causando el error ..
imageView.setImageDrawable(createDrawableFromURL("http://savagelook.com/misc/sl_drop2.png"));
Y el error explica por qué es así ..
Only the original thread that created a view hierarchy can touch its views.
Este error se debe a que está intentando cambiar la interfaz de usuario en mainthread de algún otro hilo .. aquí doInBackground en su caso …
- Gradle no puede conectarse a repo de maven a través de proxy corporativo – necesita configurar a través de Sencha / Córdoba
- Ya existe un proyecto con ese nombre en el espacio de trabajo eclipse