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).

@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 …

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; 
  • Error al resolver: okhttp loggin-interceptor
  • Picasso no carga imágenes
  • OkHttp cómo registrar el cuerpo de la solicitud
  • Obtención de solicitud de contenido corporal mediante el método POST de Retrofit 2.0
  • Cómo agregar varios encabezados con ok Http
  • Hacer la solicitud HTTP usando la biblioteca OkHttp dentro de doInBackground () de AsyncTask bloquea la operación de la interfaz de usuario
  • ¿Usando OKHttp, cuál es la diferencia entre la petición síncrona en AsyncTask y la petición asíncrona de OKhttp?
  • Android okHttp addFormDataPart dinámicamente para múltiples imágenes
  • Añadir cookie a la solicitud del cliente OkHttp
  • Native crash en /system/lib/libssl.so utilizando Retrofit
  • Com.android.volley.NoConnectionError después de detener la aplicación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.