从Android调用REST(POST)Web服务

时间:2013-01-10 21:58:53

标签: android web-services rest

我正在尝试创建一个Web服务并在Android中使用它。它正在使用GET方法,但我无法调用POST方法。

@Path("/dictionary")
public class DictionaryWebService {

private final static String ID = "id";
private final static String WORD = "palabra";
private final static String DESCRIPTION = "description";

.....  
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Word postNewWord(MultivaluedMap<String, String> newWord) {

    Word dict;


    String id = newWord.getFirst(ID);
    String word = newWord.getFirst(WORD);
    String description = newWord.getFirst(DESCRIPTION);

    dict = new Word(id, word, description);
    dictionary.putNewWord(dict);

    System.out.println("New Word info: " + dict.toString());

    return dict;

    }
}

我的Android代码是:

        @Override
        public void onClick(View arg0) {
            System.out.println("onClick!!!");
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost post = new HttpPost("http://10.0.2.2:8080/DictionaryWebService/rest/dictionary/");
            post.setHeader("content-type", "application/json");

            //Construimos el objeto cliente en formato JSON
            JSONObject dato = new JSONObject();



            try {


                dato.put("id", txtId.getText().toString()); 
                dato.put("palabra", txtWord.getText().toString());
                dato.put("description", txtDescription.getText().toString());

                StringEntity entity = new StringEntity(dato.toString());
                post.setEntity(entity);

                HttpResponse resp = httpClient.execute(post);
                String respStr = EntityUtils.toString(resp.getEntity());


                System.out.println("OKAY!");

            .....

        }
    });

我不知道但是我无法执行webservice ,,,它没有被调用。怎么了??有人能帮助我吗? onclick方法完成没有任何错误。

谢谢。

2 个答案:

答案 0 :(得分:2)

我使用了你的代码,它运行正常吗?我做的唯一改变是我将帖子标题设置为;

post.setHeader("content-type", "application/json; charset=UTF-8");

答案 1 :(得分:1)

我这样做的方式与你的方式有所不同,但我在客户的角度看到了与你的相似的一个例子(Http post with parameters not working)使用了额外的post.setHeader调用:

post.setHeader("Accept", "application/json");

这是您已经进行的post.setHeader调用的补充。

链接中的示例也是一个很好的简短测试,用于检查其他所有内容是否正常工作(完整性检查)。

希望这有帮助。