3

我正在尝试创建一个 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;

    }
}

我的安卓代码是:

        @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!");

            .....

        }
    });

我不知道,但我无法执行网络服务,,,它没有被调用。怎么了??有人可以帮助我吗?onclick 方法完成,没有任何错误。

谢谢你。

4

2 回答 2

2

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

post.setHeader("content-type", "application/json; charset=UTF-8");
于 2013-07-31T07:33:53.410 回答
1

我这样做与您有所不同,但是从客户端的角度来看,我看到的 SO 中的一个示例与您的示例相似(带有参数的 Http post 不起作用)使用了额外的 post.setHeader 调用:

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

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

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

希望这可以帮助。

于 2013-01-10T22:49:11.360 回答