Отправить информацию из приложения Android в веб-сервис и обратно
Допустим, мне нужно создать приложение для Android, которое одним нажатием кнопки отправит число из текстового поля веб-службе. Эта служба отправит обратно строку с надписью "Ваш номер был... " и список сотрудников, взятых из базы данных, отправленных в виде XML
У меня нет физического доступа к коду веб-службы, но я знаю, что у него есть метод "getData", который принимает int и возвращает строку. Он также имеет метод "GetEmployees", который ничего не берет и возвращает XML, упомянутый выше.
Адрес веб-службы выглядит примерно так: http://exemple.qc.ca/exemple/Service1.svc
После поиска я наткнулся на 3 способа связи между Android-приложением и сервисом.
Использование мессенджера из связанных служб Android
Использование KSOAP2
Использование HTTPClient, например http://lukencode.com/2010/04/27/calling-web-services-in-android-using-httpclient/
У меня проблемы с выяснением, какой из этих методов соответствует моим потребностям.
Чтобы прояснить то, что мне нужно, мне удалось создать пример кода с использованием Visual Studio и VB.Net:
Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
Dim service As New ServiceReference2.Service1Client(ServiceReference2.Service1Client.EndpointConfiguration.BasicHttpBinding_IService1)
Try
lblReturn.Text = Await service.GetDataAsync(CInt(txtValueSent.Text))
Catch ex As Exception
lblReturn.Text = ex.Message
If Not ex.InnerException.Message Is Nothing Then
lblReturn.Text = lblReturn.Text + ex.InnerException.Message
End If
End Try
Я новичок в мобильном программировании и не могу понять, как сделать это с помощью Java в Android Studio.
2 ответа
Я думаю, что лучший способ добиться своей работы - использовать HTTP-пост, для этого вам нужно 5 вещей:
1) сделать объект Json: JSONObject jsonobj = new JSONObject(); //you need to fill this object
2) Создайте http-клиент:
DefaultHttpClient httpclient = new DefaultHttpClient();
3) создать ответ http и запрос http:
HttpResponse httpresponse;
HttpPost httppostreq;
3) заполните ваш http запрос:
httppostreq = new HttpPost(SERVER_URL);
4) прикрепите объект json (тот, который вы отправите):
StringEntity se = new StringEntity(jsonobj.toString());
se.setContentType("application/json;charset=UTF-8");
httppostreq.setEntity(se);
5) получить ответ: httpresponse = httpclient.execute(httppostreq); //as a Json object
2 наблюдения: вам нужно перехватить возможные исключения, и всегда HTTP-запрос должен выполняться в другом потоке.
Зависит в значительной степени от того, как создается веб-сервис. Поскольку в вашем вопросе недостаточно подробностей, я могу дать вам совет придерживаться HTTP-клиента Android, только если вы хотите, чтобы ваши запросы обрабатывались.
Если вы хотите только отправлять / получать простые данные из веб-сервиса, вы можете использовать Sockets и записывать / читать их выходные / входные потоки. Конечно, вы должны самостоятельно реализовать протокол HTTP. Тем не менее, для простых запросов это мой предпочтительный метод. Если вы не знакомы с протоколом HTTP, я предлагаю взглянуть на плагины браузера, такие как Live HTTP Headers.
Пример запроса к стартовой странице Google:
try {
Socket socket = new Socket("google.com", 80);
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.print("GET /\r\nHost:google.com\r\n\r\n");
writer.flush();
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader reader = new BufferedReader(isr);
for(String s; (s = reader.readLine()) != null;) {
System.out.printf("%s", s);
}
isr.close();
} catch (IOException e) {
e.printStackTrace();
}