将信息从 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 种通信方式
使用 Android
的绑定服务中的 Messenger
使用 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
我是移动编程的新手,不知道如何在 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();
}
假设我需要创建一个 android 应用程序,它会在单击按钮时将数字从文本框发送到 Web 服务。该服务将发回一个字符串 "your number was ... " 和从数据库中获取的员工列表作为 XML
发回我没有对 Web 服务代码的物理访问权限,但我知道它有一个 "getData" 方法,该方法采用 int 和 returns 字符串。它还有一个 "GetEmployees" 方法,它什么也不做,returns 上面提到的 XML。
Web 服务的地址如下所示:http://exemple.qc.ca/exemple/Service1.svc
经过搜索,我发现了 android 应用程序和服务之间的 3 种通信方式
使用 Android
的绑定服务中的 Messenger
使用 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
我是移动编程的新手,不知道如何在 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();
}