2013-02-19 58 views
1

Android装置我有用于使用HttpPost发送数据在Android代码:接收JSON变量从发送和使用HttpPost

public static void sendRideIdAndEmail(String rideId,String email){ 
    HttpClient client = new DefaultHttpClient(); 
    HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit 
    HttpResponse response; 
    JSONObject json = new JSONObject(); 

    try { 
     HttpPost post = new HttpPost("http://192.168.1.59/FareShareREST/api/rides/joinRide"); 
     json.put("rideid", rideId); 
     json.put("emailid", email); 
     Log.v("RideEmailJson",json.toString()); 
     StringEntity se = new StringEntity(json.toString()); 
     se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
     post.setEntity(se); 
     response = client.execute(post); 

     /*Checking response */ 
     if(response!=null){ 
      InputStream in = response.getEntity().getContent(); //Get the data in the entity 
     } 

    } catch(Exception e) { 
     e.printStackTrace(); 
     Log.v("Error", "Cannot Estabilish Connection"); 
    } 

} 

我有一个RESTful POST方法在服务器侧上的Tomcat 7运行:

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("joinRide") 
public Response joinRide(@PathParam("rideid") long rideid,@PathParam("emailid") String  emailid) { 
    System.out.println(emailid); 
    Ride ride=rideRepository.getRideById(rideid); 
    UserDetail userDetail=userRepository.getUserDetailbyEmailId(emailid); 
    User user=new User(); 
    user.setName(userDetail.getName()); 
    user.setRegistrationId(userDetail.getRegistrationId()); 
    rideRepository.addUserToRide(ride, user); 
    return Response.ok().build(); 
} 

但我总是收到电子邮件ID为null.I已尝试使用@FormParam。但这似乎不起作用。

有人可以提供任何帮助吗?

回答

0

从传入的请求URL中提取路径参数(@PathParam)。因此,例如,与URL http://192.168.1.59/FareShareREST/api/rides/joinRide/5和下面的代码:

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("/joinRide/{rideid}") 
public Response joinRide(@PathParam("rideid") long rideid) { 
    System.out.println(rideid); 
} 

你会得到rideid映射到55的值来自映射的URL部分(/joinRide/{id})。 但是,这对您的场景没有用处 - 您正在创建JSON对象并将其包含在请求正文中。在这种情况下,在服务器端,JAX-RS提供程序会将此请求主体映射到资源方法中的第一个符合条件的参数。你要编写与此类似:

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("/joinRide") 
public Response joinRide(String json) { 
    System.out.println(json); 
} 

这将直接设置你的JSON字符串变量如此巧妙地命名为json。当然,你需要解析JSON来获取数据,你可能不想这样做。在这种情况下,创建一个包含预期数据字段的简单POJO,并在资源方法中使用它:

public class EmailInfo implements Serializable { 
    private String rideId; 
    private String email; 

    // Constructors, Getters/Setters 
} 

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("/joinRide") 
public Response joinRide(EmailInfo info) { 
    System.out.println(info.getRideId()); 
    System.out.println(info.getEmail()); 
} 
+0

谢谢。但我想只传递POST中的变量,可以在serverSide中接收。我有什么办法 – user1827423 2013-02-19 19:16:58

+0

好的,所以你的服务器端是固定的,但你可以改变客户端? – Perception 2013-02-19 19:18:54

+0

我只想从我的android应用程序发布变量。所以它可以在服务器上收到 – user1827423 2013-02-19 19:21:55