将信息从 android 应用程序发送到 Web 服务并返回

Send information from android application to a Web Service and back

假设我需要创建一个 android 应用程序,它会在单击按钮时将数字从文本框发送到 Web 服务。该服务将发回一个字符串 "your number was ... " 和从数据库中获取的员工列表作为 XML

发回

我没有对 Web 服务代码的物理访问权限,但我知道它有一个 "getData" 方法,该方法采用 int 和 returns 字符串。它还有一个 "GetEmployees" 方法,它什么也不做,returns 上面提到的 XML。

Web 服务的地址如下所示:http://exemple.qc.ca/exemple/Service1.svc

经过搜索,我发现了 android 应用程序和服务之间的 3 种通信方式

我无法确定哪些方法适合我的需要。

为了使我需要的内容更清楚,我设法使用 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

我是移动编程的新手,不知道如何在 android studio 中使用 java 来做到这一点。

我认为完成工作的最佳方式是使用 HTTP post,为此您需要 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 请求。

很大程度上取决于网络服务的构建方式。因为你的问题在这里缺乏细节,如果你想管理你的请求,我只能给你建议坚持使用 Android HTTP 客户端。

如果您只想 send/receive 来自网络服务的纯数据,您可以使用 Sockets and write/read to their output/inputstreams. Of course you have to implement the HTTP protocol on your own this way. Nevertheless for simple requests this is my preferred method. If you are not known to the HTTP protocol I suggest to take a look at browserplugins like 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();
    }