2015-03-31 150 views
1

我创建了简单的REST Web服务,它从客户端获取三个字符串并将它们保存到数据库。它从Java客户端应用程序运行良好。从Android连接到Jersey REST Web服务

现在,我想从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(); 

    } 

} 
+0

额外的罐子会增加应用程序的大小,您可以使用Java HTTP URL连接类 – 2015-03-31 08:17:35

+0

额外的罐子一样,做同样喜欢我在Java应用程序那样轻松地调用REST服务?试过了,事情变得非常复杂,我放弃了,我正在寻找更好的解决方案。 将尝试与HTTP URL连接,是的,只是为了弄清楚如何做到这一点。 – Tinmar 2015-03-31 08:23:29

+1

Android SDK没有JDK中提供的所有类,因此您不能指望第三方jar在android上工作,除非它们不兼容,因此我建议使用Android SDK中提供的标准类,而不是使用Java应用程序罐。 HttpURLConnection是非常comman类和数以千计的网上可用的例子。 – 2015-03-31 09:03:08

回答

0

我发现这个解决办法,但大多数类已被弃用。它工作正常(现在),会尝试找到更好的解决方案并将其发布到此处。

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