【问题标题】:Connecting to Jersey REST Web Service from Android从 Android 连接到 Jersey REST Web 服务
【发布时间】: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


【解决方案1】:

我找到了解决方案,但大多数类都已弃用。它工作正常(目前),将尝试找到更好的解决方案并将其发布在这里。

            Looper.prepare();
            HttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(),
                    10000);
            HttpResponse response;
            JSONObject obj = new JSONObject();

            String timey = DateFormat.getDateTimeInstance().format(new Date());

            try {
                HttpPost post = new HttpPost(SERVICE_URL);
                obj.put("lon", longitude);
                obj.put("lat", latitude);
                obj.put("dateTime", timey);
                StringEntity se = new StringEntity(obj.toString());
                se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
                        "application/json"));
                post.setEntity(se);
                response = client.execute(post);

                if (response != null) {
                    InputStream in = response.getEntity().getContent();
                }

            } catch (Exception e) {
                e.printStackTrace();

            }

            Looper.loop();

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2013-07-16
    • 2012-09-10
    相关资源
    最近更新 更多