В общем суть: Имеется метод вход, который посылает пакет входа на сервер и лач(CountDownLatch) с количеством 1, который понижается тогда, когда с сервера придет ответ - результат входа.
Вход примерно такой:
1. создаем лач
2. посылаем пакет
3. ждем лач(await)
4. Получаем данные о аккаунте, которые хранятся просто в классе полем "data".
Вызов с сервера примерно такой:
Проверяем ответ, если нужный, то складываем данные в data и понижаем латч.
Как мне сделать это идеально, т.к. иногда из-за того, что вызов с сервера в другом потоке не успевает установится поле в классе и в методе входа вываливается нул поинтер...
В общем как лучше всего синхронизировать метод входа, если результат приходит ассинхронно, а входа метод должен быть синхронный и блокирующий..
При этом, если метод вызвали, а результат не пришел и методы вызвали еще раз нужно выбрасывать исключение..
Посоветуйте. Спасибо!
АП:Туда же..
Что делать, если у тебя есть метод возвращающий boolean - canHandle, если там true, то метод входа можно вызывать, если false, значит подключения нету и метод входа вывалит ошибку.
Как в джаве можно подождать, пока метод будет возвр. true? while(canHandle()) не предлагайте плиз...
Не видя код, сложно предположить, как вы взаимодействуете с сервером. Обычно в подключении указывается timeout, по истечении которого у listener дергается метод onError() (или что-то в этом роде). Если же данные пришли успешно - дергаем метод success(T data)