【发布时间】:2015-03-31 08:15:44
【问题描述】:
我创建了简单的 REST Web 服务,它从客户端获取三个字符串并将它们保存到数据库中。它在 Java 客户端应用程序中运行良好。
现在,我想在 Android 设备上做同样的事情。从我的设备连接到服务并执行相同操作的最佳方式是什么?
我是 Android 新手,在网上搜索了很多,只是找不到足够简单的东西来理解如何去做。希望有人能帮忙。
RESTLocationService.java:
@Path("/data")
public class RESTLocationService {
@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
public Response createDataInJSON(JSONObject data) throws JSONException {
String lon = data.getString("lon");
String lat = data.getString("lat");
String dateTime = data.getString("dateTime");
String location = "Longitude: " + lon + ", latitude: " + lat
+ ", time: " + dateTime + ".";
DataHiber dataHiber = new DataHiber(lon, lat, dateTime);
DBUtils.saveLocations(dataHiber);
return Response.status(201).entity(location).build();
}
}
RESTLocationClient.java:
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Client client = Client.create();
WebResource webResource = client
.resource("http://192.168.111.77:8080/TebLocationService/rest/data/post");
String longy = "46.8888778877";
String latty = "12.9485495894859";
String timey = "29/03/2015 14:03";
JSONObject obj = new JSONObject();
obj.put("lon", longy);
obj.put("lat", latty);
obj.put("dateTime", timey);
ClientResponse response = webResource.type("application/json")
.post(ClientResponse.class, obj);
if (response.getStatus() != 201) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
System.out.println("Output from Server .... \n");
String output = response.getEntity(String.class);
System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
}
}
【问题讨论】:
-
额外的 jars 会增加应用程序的大小,您可以使用 java HTTP URL 连接类轻松调用 REST 服务
-
额外的 jars,就像我在 Java 应用程序中所做的一样?试过了,事情变得非常复杂,我放弃了我正在寻找更好的解决方案。将尝试使用 HTTP URL 连接,是的,只是为了弄清楚如何去做。
-
Android SDK 没有 JDK 中可用的所有类,因此除非不兼容,否则您不能指望第三方 jar 在 android 上正常工作,因此我建议使用标准类在 Android SDK 中可用的是使用 java 应用程序 jars。 HttPURLConnection 是非常通用的类,网上有数千个示例。
-
好的,谢谢您的建议。
标签: java android json rest jersey