Java 如何在Android客户端与RESTful Web服务通信

Java 如何在Android客户端与RESTful Web服务通信,java,android,rest,jersey,Java,Android,Rest,Jersey,我使用(Java+Jersey)开发了一个rest Web服务。。。 该服务需要与用户通信,即用户需要在android客户端应用程序中填写表单,并将其发送回rest webservice,在那里进行处理,相应地,用户将获得输出 当我第一次使用RESTWebService时,我使用了一个webclient…因此能够以表单参数“post”和“get”发送和接收请求 但是在android中如何做到这一点,因为没有具有method=“post” 我被指示使用XML解析 更新:我知道如何在ANDROID中

我使用(Java+Jersey)开发了一个rest Web服务。。。 该服务需要与用户通信,即用户需要在android客户端应用程序中填写表单,并将其发送回rest webservice,在那里进行处理,相应地,用户将获得输出

当我第一次使用RESTWebService时,我使用了一个webclient…因此能够以表单参数“post”和“get”发送和接收请求

但是在android中如何做到这一点,因为没有具有
method=“post”

我被指示使用XML解析

更新:我知道如何在ANDROID中从RESTWebService连接和获取数据,但我们如何发布它

接受webclient响应的我的表单方法:

@Path("/create")
    @POST
    @Produces({MediaType.TEXT_HTML,MediaType.APPLICATION_XML})
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public void newUser(@FormParam("uname") String uname,
            @FormParam("password") String password,
            @Context HttpServletResponse servletResponse) throws IOException {
        boolean unamec= UserLogin.checkuname(uname);
        if (unamec) {
            // User already exists
            servletResponse.sendRedirect("http://mysite/Login.html");
        } else {
            UserLogin u = new UserLogin(uname, password);
            servletResponse.sendRedirec("http://mysite/users/"+uname+"/createnewshop");
        }
    }

您需要android客户端向Web服务发送HTTP请求。 看看课堂。在这里你可以找到一个快速介绍

此外,在本例中,还必须对类(YourClass.java)进行注释。 就像这样:

@XmlRootElement(name="TagName")
@XmlAccessorType(XmlAccessType.FIELD)
public class YourClassimplements Serializable
{
private static final long serialVersionUID = 1L;
@XmlAttribute
private int ID;
@XmlElement
private String name;

我看到你要求
POST
方法。这里有一个片段可以帮助您

        String urlParameters = "param_a=a&param_b=b";
        URL url = new URL("http://www.yourwebservice.com");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        connection.setDoOutput(true); 
        connection.setDoInput(true);
        connection.setInstanceFollowRedirects(false); 
        connection.setRequestMethod("POST"); 
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
        connection.setRequestProperty("charset", "utf-8");
        connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
        connection.setUseCaches(false);

        // Writes the content to the web service
        OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
        writer.write(urlParameters);
        writer.flush();
        writer.close();

        // Reads the reply from the web service
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String decodedString;
        while ((decodedString = in.readLine()) != null) {
            returnMsg += decodedString;
        }

        in.close();   
        connection.disconnect();

我只建议您使用连接到HTTP,这样您就可以保证您的android应用程序在所有android系统中都能工作。

看看loopj,它构建在Apaches httpclient之上,使网络操作变得轻而易举。它允许您使用json和xml,调用是异步的,并且它有一个get/post参数生成器,因此您可以轻松设置参数。看

根据文档提供的一个快速示例:

private static final String BASE_URL = "http://api.twitter.com/1/";
private static AsyncHttpClient client = new AsyncHttpClient();

// i've skipped some of the implementation details, but in essence it boils down to this: 
client.post(url, params, responseHandler);

再次查看我的问题是的,请阅读…但我仍然很困惑,如果方法具有
@FormParam(“name”)
,那么它将如何被读取,就像我创建webservice时的情况一样…让我把我的表单方法也放在我的问题中…查看它@为什么被否决??投否决票的人如果你有答案,那就说出来……这是一场投否决票的瘟疫。修正了…从另一个方向看,查找编组XML应该很容易找到。您可以再次阅读我的问题。.我有
@FormParam
在您的代码中我将在哪里使用它?
private static final String BASE_URL = "http://api.twitter.com/1/";
private static AsyncHttpClient client = new AsyncHttpClient();

// i've skipped some of the implementation details, but in essence it boils down to this: 
client.post(url, params, responseHandler);