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.
- Retrofit + okhttp: Recuperar GZIPInputStream
- Retrofit Tiempo de respuesta más lento en los dispositivos Android reales en comparación con el emulador y la web
- Actualizar / cambiar el mapa de bits en caché utilizando Picasso y OkHttp
- Android OkHttp addPathSegment reemplaza barras diagonales
- Manera correcta de configurar caché para OkHttp en Android
- Cómo manejar la paginación en retrofit
- OkHttp / tiempo de espera de retroactivación predeterminado
- ProGuard no funciona con okhttp
- Retrofit SocketTimeOutException al enviar datos multipartidarios o JSON en android
- Android OkHttp con autenticación básica
- No se puede obtener la respuesta de OkHttp.body.toString () para devolver una cadena
- Conexión de http de Android con OkHttp No funciona
- ¿Cómo implementar Android Volley con OkHttp 2.0?
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();
- ¿Cuál es el equivalente de listview.getCount en caso de Recyclerview
- El inicio de sesión de facebook se dispara varias veces