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 } }); 
  • Cómo hacer la solicitud https con certificado SSL en Retrofit
  • Error retrofit.RetrofitError: java.io.EOFException para Android
  • Android Retrofit Se esperaba BEGIN_OBJECT pero era STRING en la línea 1 de la columna 1 path $
  • Tienda de cookies persistente con okhttp 2 en Android
  • Si Picasso repite la imagen cargando para siempre cuando no hay acceso a Internet
  • ¿Debo usar OkHttp con la biblioteca Volley?
  • ¿Android usa OkHttp internamente?
  • Volley + OkHttp en Android da error en la respuesta de estado 200
  • Android forma correcta de utilizar OKHTTP singleton para consultas paralelas con cookies
  • Conexión de http de Android con OkHttp No funciona
  • ¿Cómo hacer que OKHTTP envíe una solicitud sin un cuerpo de solicitud?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.