Передать в класс функцию для выполнения из класса
Не пинайте сильно новичка в java. Мне нужно реализовать такой функционал: Есть свой класс myOkHttpClient в нем обрабатывается ответ от сервера по событию onResponse() Мне нужно чтобы по получению ответа передать этот ответ назад в место вызова. Т.е. что-то типа такого:
myOkHttpClient myClient = new myOkHttpClient(MainActivity.this, SERVER_URL);
myClient.getResponse((response) -> {
// сделать что-то с response
});
public class myOkHttpClient {
// много кода
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
// тут вернуть response назад в место вызова
}
}
Полагаю, что подход, который можно реализовать через callback в JS тут неприменим. Направьте пожалуйста в нужно направлении, спасибо.
Ответы (1 шт):
Подход с использованием callback-a применим. Можно, например, передать его в конструктор myOkHttpClient и сохранить в поле:
private final Consumer<Response> responseHandler;
public myOkHttpClient(Consumer<Response> responseHandler)
{
this.responseHandler = responseHandler;
}
после чего вызвать в методе onResponse:
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException
{
responseHandler.accept(response);
}
Можно пойти и другим путём, особенно если нужно выполнять responseHandler в потоке, отличном от потока, в котором вызывается onResponse. Для этого в клиенте должен быть метод отправки запроса (sendRequest), а Call или Response должны уметь хранить контекст сделанного запроса
Если всё так, то можно в sendRequest генерировать id запроса (requestId), отдавать его в качестве результата вызова метода, а в onResponse складывать response в HashMap<Integer, Response> requestIdToResponse. Во внешнем же коде нужно будет периодически поллить клиент на предмет появления response-a по заданному requestId