Отправить информацию из приложения Android в веб-сервис и обратно

Допустим, мне нужно создать приложение для Android, которое одним нажатием кнопки отправит число из текстового поля веб-службе. Эта служба отправит обратно строку с надписью "Ваш номер был... " и список сотрудников, взятых из базы данных, отправленных в виде XML

У меня нет физического доступа к коду веб-службы, но я знаю, что у него есть метод "getData", который принимает int и возвращает строку. Он также имеет метод "GetEmployees", который ничего не берет и возвращает XML, упомянутый выше.

Адрес веб-службы выглядит примерно так: http://exemple.qc.ca/exemple/Service1.svc

После поиска я наткнулся на 3 способа связи между Android-приложением и сервисом.

У меня проблемы с выяснением, какой из этих методов соответствует моим потребностям.

Чтобы прояснить то, что мне нужно, мне удалось создать пример кода с использованием 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();
    }
Другие вопросы по тегам