OkHTTP Actualiza la interfaz de usuario desde la devolución de llamada en cola

Estoy intentando utilizar la biblioteca de OkHTTP. Al realizar una llamada al servidor y obtener una respuesta satisfactoria de nuevo. Necesito actualizar la interfaz de usuario.

¿Cómo se puede hacer esto al hacer una llamada Async usando el enqueue ()?

client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { if (response.isSuccessful()) { // NEED TO UPDATE UI HERE } } }); 

Puede consultar el código de ejemplo siguiente, espero que esto ayude!

 public class MainActivity extends AppCompatActivity { private static final String LOG_TAG = "OkHttp"; private TextView mTextView; private Handler mHandler; private String mMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.textView); mHandler = new Handler(Looper.getMainLooper()); OkHttpClient client = new OkHttpClient(); // GET request Request request = new Request.Builder() .url("http://...") .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { mMessage = e.toString(); Log.e(LOG_TAG, mMessage); // no need inside run() mHandler.post(new Runnable() { @Override public void run() { mTextView.setText(mMessage); // must be inside run() } }); } @Override public void onResponse(Response response) throws IOException { mMessage = response.toString(); Log.i(LOG_TAG, mMessage); // no need inside run() mHandler.post(new Runnable() { @Override public void run() { mTextView.setText(mMessage); // must be inside run() } }); } }); } } 

Si su código no actualiza la interfaz de usuario, le sugiero que especifique el hilo, ya que la interfaz de usuario está en su propio hilo:

 client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { if (response.isSuccessful()) { runOnUiThread(new Runnable() { @Override public void run() { //TODO: update your UI } }); } } }); 

Prueba esto:

 Handler mainHandler = new Handler(Looper.getMainLooper()); mainHandler.post(new Runnable() { @Override public void run() { // code to interact with UI } }); 
  • Volley + OkHttp en Android da error en la respuesta de estado 200
  • Cómo convertir la respuesta de Okhttp en inputstream
  • Picasso no carga imágenes
  • La mejor manera de descargar un archivo en una aplicación de Android
  • Cuándo llamar a response.body (). Close ()
  • Retrofit 2.0 java.lang.IllegalStateException: Se esperaba BEGIN_ARRAY pero era STRING
  • Cómo configurar el caché Http cuando se utiliza Volley con OkHttp?
  • OkHttp no redirige peticiones POST cuando se utiliza con retrofit
  • ¿Es posible inhabilitar los siguientes redireccionamientos en OkHttp 2.0?
  • OkHttp cómo registrar el cuerpo de la solicitud
  • MissingResourceException: No se puede encontrar el paquete para el nombre base sun.util.logging.resources.logging, locale en_US
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.