#java #android #http
Пишу приложение для Android, нужно принять и обработать http запрос. Скачала с apache.org пакеты .jar положила в папку libs проекта, IDE видит библиотеки apache но я не знаю с какой стороны к ним подступиться, я разобралась как отправлять запросы из приложения, а вот как в этом же приложении принимать запросы никак не могу догадаться, и ведь тут наверно надо запускать много потоков что бы они слушали соединения, вдруг будет сразу несколько запросов. Подозреваю что из всех пакетов мне нужен org.apache.http, но в папке несколько файлов: commons-codec-1.9.jar commons-logging-1.2.jar fluent-hc-4.5.1.jar httpclient-4.5.1.jar httpclient-cache-4.5.1.jar httpclient-win-4.5.1.jar httpcore-4.4.3.jar httpmime-4.5.1.jar jna-4.1.0.jar jna-platform-4.1.0.jar Если подключить их все, возникает конфликт. Какой из этих файлов нужен что бы обрабатывать http запрос и как это реализовать? Или сколько потоков нужно сразу запускать?
Ответы
Ответ 1
На английском SO рекомендуют этот проект https://github.com/NanoHttpd/nanohttpd Написал небольшой проект с использованием этой библиотеки, весь проект можно посмотреть тут: https://github.com/ASEgorov/HttpServerExample Основные моменты: Создается новый класс как наследник от NanoHTTPD public class Server extends NanoHTTPD { private static final String LOG_TAG = "MyServer"; private String parameter; public Server(int port) throws IOException { super(port); start(); Log.i(LOG_TAG, "Server started"); } @Override public Response serve(IHTTPSession session) { Log.i(LOG_TAG, "Receive query"); String msg = "Hello server
\n"; msg += "Hello, " + parameter + "!
"; return new Response( msg + "\n" ); } public void setParameter(String parameter) { this.parameter = parameter; } } Инициализируете этот сервер, например при старте Activity: try { mServer = new Server(8080); } catch (IOException e) { Log.e(LOG_TAG, "Can't start server", e); } Я передавал данные в этот сервер по кнопке (чтобы проверить что ответ от сервера изменяется): @Override public void onClick(View v) { TextView param = (TextView) findViewById(R.id.someData); mServer.setParameter(param.getText().toString()); } Для того чтобы это все работало нужно добавить в Gradle соответствующую библиотеку compile 'com.nanohttpd:nanohttpd:2.1.1' и разрешение в манифест
Комментариев нет:
Отправить комментарий