Интерфейс обновления OkHTTP от обратного вызова очереди

Я пытаюсь использовать библиотеку OkHTTP. При звонке на сервер и получении успешного ответа. Мне нужно обновить интерфейс.

Как это можно сделать при выполнении вызова Async с помощью 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 } } }); 

Вы можете обратиться к следующему образцу кода, надеясь, что это поможет!

 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() } }); } }); } } 

Если ваш код не обновляет пользовательский интерфейс, я бы предложил вам указать поток, так как пользовательский интерфейс находится в отдельном потоке:

 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 } }); } } }); 

Попробуй это:

 Handler mainHandler = new Handler(Looper.getMainLooper()); mainHandler.post(new Runnable() { @Override public void run() { // code to interact with UI } }); 
Intereting Posts
Eclipse «Android Device Chooser» – красный крест Infront всех устройств в столбце Target Генерировать ошибку Ant buildfiles Зачем нужна функция onBackpressure () здесь для событий click? В чем преимущество апклиба из банки? Как переносить объявления Android TextView? Как снимать камеру без предварительного просмотра из службы или потока? Селектор строк ListView на уровне API 10? Как разместить нижнюю из двух просмотров в ConstraintLayout? PARSE: Push Notifications «deviceToken» не определено Невозможно добавить библиотеку в мой проект Android Как остановить медиаплеер должным образом, андроид Сбой после добавления меню параметров пункта в панель действий из фрагмента, за которым следует изменение ориентации Как проверить подключение или отключить сетевое подключение в WIFI и 3G (план данных) на мобильных устройствах? Не удалось решить: com.android.support:appcompat-v7 24.0.1 Feature Custom Title: Невозможно объединить пользовательские заголовки в API 11 и выше