Я хочу написать класс, который обрабатывает все мое сетевое взаимодействие под названием NetworkManager
. Таким образом, используя экземпляр этого класса, я бы что-то вроде:Лучший подход к написанию сетевого класса
NetworkManager nm = new NetworkManager();
...
nm.login(username, password);
...
Тем не менее, то, что это лучший подход, так это сетевой администратор может сделать что-то в потоке пользовательского интерфейса, как только некоторый ответ был получен? Моделирование на события типа OnClick Я думаю, что это будет так:
nm.getPicture(new NetworkListener() {
@Override
public void run(Picture p){
updateUI(p);
}
Где я не уверен, как написать метод getPicture
и класс NetworkListener().
Я не хочу использовать AsyncTask
, потому что это означало бы, что мне придется писать код сервера в разных частях MainActivity. Я также рассматривал вещателя и слушателя, но это кажется слишком сильным для одного события.
http://developer.android.com/training/basics/network-ops/connecting.html. В официальной документации рекомендуется использовать AsyncTask. Это не означает, что все сетевые коды должны быть в этой AsyncTask. Ничто не мешает вам просто делегировать ваш NetworkManager внутри AsyncTask. –
Я думаю, что AsyncTask является обязательным. Затем вы можете использовать прослушиватель, чтобы сообщить своей активности/фрагменту, что операция завершена. Используйте другой метод для вызова другого события, например onLoginSuccessful, onLoginUnsuccessfull, onConnectionError и т. Д. –
. Моя проблема заключается в том, что я уже использую асинхронный клиент Http (jloops). Поэтому я просто хочу иметь возможность вызывать метод на клиенте в «NetworkManager», а затем - это событие результата, чтобы вызвать какое-то взаимодействие с пользовательским интерфейсом в MainActivity. Я полагаю, что я не мог использовать jloops и сам кодировать все серверные материалы, имея каждое взаимодействие с сервером в «NetworkManager», блокирующее поток, время, а затем используя AsyncTask для каждого взаимодействия с сервером. Это довольно тяжело, но с тех пор мне понадобится отдельная AsyncTasks для всех разных серверных взаимодействий. – jamanji