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

时间:2015-03-19 19:23:12

标签: java web-services android-studio android-ksoap2 androidhttpclient

假设我需要创建一个Android应用程序,只需点击一下按钮,就可以将文本框中的数字发送到Web服务。该服务将发回一个字符串,上面写着“您的号码是......”,以及从数据库中取回的员工列表,以XML格式发回

我没有物理访问Web服务的代码,但我知道它有一个“getData”方法,它接受一个int并返回字符串。它还有一个“GetEmployees”方法,它不需要任何东西,并返回上面提到的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。

2 个答案:

答案 0 :(得分:1)

我认为实现工作的最佳方式是使用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请求。

答案 1 :(得分:1)

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

如果您只想从网络服务发送/接收普通数据,您可以使用Sockets并写入/读取其输出/输入流。当然,您必须以这种方式自己实现HTTP协议。然而,对于简单的请求,这是我的首选方法。如果您不了解HTTP协议,我建议您查看像Live HTTP Headers这样的browserplugins。

查询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();
    }