2013-02-19 56 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