【问题标题】:Send information from android application to a Web Service and back将信息从 android 应用程序发送到 Web 服务并返回
【发布时间】:2015-03-19 19:23:12
【问题描述】:

假设我需要创建一个 android 应用程序,该应用程序将在单击按钮时将一个数字从文本框发送到 Web 服务。该服务将发回一个字符串,上面写着“你的号码是……”,以及从数据库中提取的员工列表,以 XML 形式发回

我没有对 Web 服务代码的物理访问权限,但我知道它有一个“getData”方法,它接受一个 int 并返回字符串。它还有一个“GetEmployees”方法,它什么都不接受并返回上面提到的 XML。

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

经过搜索,我发现了 android App 和服务之间的 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。

【问题讨论】:

  • 个人推荐 httpClient 路由而不是其他路由。但是,只有您拥有做出决定的所有知识,因为我们并不真正了解您的所有需求。
  • 这是实习,我还没有关于该计划的所有详细信息,但我知道我需要获取员工名单等信息,然后需要浏览通过该列表并获取所述员工的信息。我发送的任何查询的信息都将使用 XML 发回。

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


【解决方案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 请求。

【讨论】:

  • 我希望它有效,对于我的语法,我在这里新发帖表示抱歉;)
  • 如果我理解得很好,服务将需要接收一个 JSON 对象,然后在治疗后发回一个?如果信息以 XML 形式发回会不会有问题?另外,您如何在服务上调用特定方法。是 httppostreq 中的 SERVER_URL + "/" + METHOD 吗?感谢您的宝贵时间,您已经非常有帮助了。
  • 发回xml没有问题,一定能正确接收。
  • 要调用一个特定的方法,你有 3 个主要对象:
  • 1) Defaulthttpclient, HttpResponse 和 HttpPost, 请求特定的URL, 使用Defaulthttpclient.execute(HttpPost);其中 HttpPost 使用 SERVER_URL “加载”(当您创建 HttpPost 对象时 httppostreq = new HttpPost(SERVER_URL);)并最终从服务器收到答案,如下所示: HttpResponse = Defaulthttpclient.execute(HttpPost);你也可以使用 httpResponse.getEntity().getContent();让你的流回来。我希望它是可以理解的
【解决方案2】:

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

如果您只想从网络服务发送/接收纯数据,您可以使用Sockets 并写入/读取到它们的输出/输入流。当然,你必须以这种方式自己实现 HTTP 协议。尽管如此,对于简单的请求,这是我的首选方法。如果您不了解 HTTP 协议,我建议您查看诸如 Live HTTP Headers 之类的浏览器插件。

查询谷歌起始页的示例:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多