Android Okhttp llamadas asincrónicas
Estoy intentando utilizar la biblioteca de Okhttp para conectar mi androide app a mi servidor vía API.
Mi llamada de api está sucediendo en un clic de botón y estoy recibiendo la siguiente android.os.NetworkOnMainThreadException . Entiendo que esto se debe al hecho de que estoy intentando llamadas de red en el hilo principal, pero también estoy luchando para encontrar una solución limpia en android en cuanto a cómo hacer que este código use otro hilo (llamadas asíncronas).
- Cómo convertir la respuesta de Okhttp en inputstream
- Retrofit (2.0 beta2) La carga múltiple de archivos no funciona
- ¿Cómo usar Retrofit y SimpleXML juntos para descargar y analizar un archivo XML de un sitio?
- ¿Cómo usar Stetho con Volley?
- Http sesión siempre se crea en la versión Android ModernHttpClient (okHttp1.5)
@Override public void onClick(View v) { switch (v.getId()){ //if login button is clicked case R.id.btLogin: try { String getResponse = doGetRequest("http://myurl/api/"); } catch (IOException e) { e.printStackTrace(); } break; } } String doGetRequest(String url) throws IOException{ Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); return response.body().string(); }
Arriba está mi código, y la excepción se está lanzando en la línea
Response response = client.newCall(request).execute();
También he leído que Okhhtp soporta solicitudes Async, pero realmente no puedo encontrar una solución limpia para Android como la mayoría parece utilizar una nueva clase que utiliza AsyncTask <> ??
Cualquier ayuda o sugerencias son muy apreciados, gracias …
- Android - OkHttp interceptor - respuesta ya "consumida"
- Actualizar / cambiar el mapa de bits en caché utilizando Picasso y OkHttp
- Cómo agregar parámetros a api (http post) usando la biblioteca okhttp en Android
- Retrofit 2 / OkHttp: Cancelar todas las solicitudes en ejecución
- Retrofit + okhttp: Recuperar GZIPInputStream
- Añadir parámetros de consulta a una solicitud GET en okhttp en Android
- Cómo obtener el cuerpo de la respuesta en okhttp cuando el código es 401
- Causado por: java.lang.NoClassDefFoundError: Clase no encontrada usando el cargador de clase de arranque; No hay rastro de la pila disponible
Para enviar una solicitud asincrónica, utilice:
void doGetRequest(String url) throws IOException{ Request request = new Request.Builder() .url(url) .build(); client.newCall(request) .enqueue(new Callback() { @Override public void onFailure(final Call call, IOException e) { // Error runOnUiThread(new Runnable() { @Override public void run() { // For the example, you can show an error dialog or a toast // on the main UI thread } }); } @Override public void onResponse(Call call, final Response response) throws IOException { String res = response.body().string(); // Do something with the response } }); }
Y lo llaman así:
case R.id.btLogin: try { doGetRequest("http://myurl/api/"); } catch (IOException e) { e.printStackTrace(); } break;
- Cómo configurar los datos de ArrayList en ListView?
- ¿Puedes vender aplicaciones como desarrollador de Google o debes ser comerciante?