Android cómo obtener la cadena de respuesta de Callback usando OkHttp?

Este es mi código:

OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url("http://publicobject.com/helloworld.txt").build(); Callback callback = new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { } }; okHttpClient.newCall(request).enqueue(callback); String responseString; 

En el código anterior, quiero almacenar el valor de response.body (). String () del método onResponse () en la variable responseString, sin embargo no puedo acceder a ella.

Creo que lo que quieres hacer es algo como esto:

 public class MyActivity extends Activity implements Callback , View.OnClickListener { @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); findViewById(R.id.DoHttp).setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId(() == R.id.DoHttp) { OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url("http://publicobject.com/helloworld.txt").build(); okHttpClient.newCall(request).enqueue(this); } } @Override public void onFailure(Request request, IOException e) { //do something to indicate error } @Override public void onResponse(Response response) throws IOException { if (response.isSuccessful()) { parse(response.body().string()); } } private void parse(String response) { //do something with response } } 

En la actividad anterior implementamos Callback y luego cuando creamos la solicitud okhttp, pasamos una instancia de nosotros mismos (this) y de esa manera podemos conseguir que oktthp devuelva la clase, podríamos haber hecho una clase interna con la misma facilidad pero Esto reduce el número de clases que tenemos que hacer. Utilicé un clic de botón para ilustrar cuándo se realiza la llamada Http, pero que podría ser en otro momento, por ejemplo, podría suceder cuando la pantalla se crea por primera vez (en onCreate). Tenga cuidado con las rotaciones de la pantalla. También esto supone que la devolución de llamada se hace en el hilo principal que creo que sería, pero no soy positivo, ya que el uso okttp de una manera diferente a usted. Si no devuelve los resultados de la respuesta en el hilo principal, entonces puede llamar a runOnUiThread () y pasarlo a Runnable que hace el trabajo de actualizar las vistas.

Si mueve la declaración responseString para que sea una variable de instancia, podrá asignar su valor al método onResponse de su Callback de Callback .

 public class MyClass { private String responseString; // your class implementation } 

He modificado el código que publicó con los cambios necesarios a continuación:

 OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url("http://publicobject.com/helloworld.txt").build(); Callback callback = new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { responseString = response.body().string(); } }; okHttpClient.newCall(request).enqueue(callback); 

La primera respuesta está cerca, pero no se puede asignar la variable final en el método onResponse. La solución es escribir final String[] responseString = new String[1]; Y asignar responseString[0] = response.body().string();

  • Retrofit - Demasiadas solicitudes de seguimiento: 21
  • Volea Android MalformedURLException URL incorrecta
  • La mejor manera de descargar un archivo en una aplicación de Android
  • El uso de la dirección IP para el nombre común en el certificado del servidor no funciona en Android?
  • Consiguió este error con retrofit2 y OkHttp3. No se puede resolver el host "<host-name>": ninguna dirección asociada con el nombre de host
  • ¿Cómo hacer que OKHTTP envíe una solicitud sin un cuerpo de solicitud?
  • ¿Cómo obtener la URL redireccionada de OkHttp3?
  • OkHttp con pinzado de certificado
  • Cómo cambiar el cuerpo en OkHttp Response?
  • Android | Obtener la versión de la biblioteca OkHTTP en tiempo de ejecución
  • Retrofit 2.0 archivo de múltiples partes que envía sendto falló: ETIMEDOUT (conexión agotada) error
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.