Añadir a la vista de reciclaje si la URL es válida.
Quiero verificar la URL en el campo de edición y, si es válida, agregar un elemento en la vista recycler. Por este propósito, inicié un hilo para verificar la conexión HTTP.
thread = new Thread(new Runnable() {
@Override
public void run() {
String link = edt.getText().toString();
URL url = null;
try {
url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int code = connection.getResponseCode();
if(code == 200) {
Log.d(TAG, "reachable");
InsertItem(url,adapter);
} else {
Log.d(TAG, "in catch: not reachable");
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
El problema es el error que recibo cuando intento agregar un elemento:
private void InsertItem(URL url, MyAdapter adapter) {
thread.currentThread().interrupt();
arrayList.add(0,new file(url.toString()));
adapter.notifyItemChanged(0);
};
y el error es:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
davy.ai
El mensaje de error implica que el hilo de interfaz de usuario está intentando acceder a vistas desde otro hilo que no está permitido. En este caso, parece que el método InsertItem() se está llamando desde un hilo separado que no es el hilo de la interfaz de usuario, por lo tanto, se produce el error.
Para solucionar este problema, puede utilizar el método runOnUiThread() de Android para actualizar la interfaz de usuario desde el hilo separado. Así es como puede modificar su método InsertItem():
Al utilizar el método runOnUiThread(), está ejecutando la actualización de la interfaz de usuario en el hilo de la interfaz de usuario y no en el hilo separado, lo que evita el error “CalledFromWrongThreadException”.