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 ()?
- Cómo resolver java.lang.AssertionError al crear OkHttpClient en mockito?
- Consiguió este error con retrofit2 y OkHttp3. No se puede resolver el host "<host-name>": ninguna dirección asociada con el nombre de host
- Diferencia entre okhttp y httpurlconnection?
- Cómo agregar matriz a okhttp cuerpo (POST)
- Error al resolver: okhttp loggin-interceptor
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 } } });
- Cómo convertir la respuesta de Okhttp en inputstream
- Retrofit Tiempo de respuesta más lento en los dispositivos Android reales en comparación con el emulador y la web
- Com.android.volley.NoConnectionError después de detener la aplicación
- Retrofit 2.0b2: ¿Cómo obtener InputStream de la respuesta?
- ¿Qué está causando HTTP FALLA: java.net.SocketException: Socket cerrado?
- Android - Utilice OkHttp con Webview
- OkHttp PublicKey pinning en Android
- ¿Cómo obtener la URL redireccionada de OkHttp3?
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 puedo mostrar y ocultar los anuncios de banner de admob?
- Instalación de Xamarin Studio en Windows