0

我已经使用(Java + Jersey)开发了一个休息网络服务......该服务需要与用户通信,即用户需要在android客户端应用程序中填写表格并将其发送回休息网络服务,在那里它将被处理并相应地用户将获得输出...

当我第一次制作其余的网络服务时,我使用了一个网络客户端......因此能够以“post”和“get”的形式发送和接收请求......

但是如何在android中做同样的事情,因为没有具有类似属性的表单标签 method="post"

我被指示使用 XML 解析。

更新:我知道如何从 REST WEBSERVICE 连接并获取 Android 中的数据,但我们如何发布呢?

我的 Form 方法接受了来自 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");
        }
    }
4

4 回答 4

1

我看到你要求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();

我只建议您使用Async Tasks连接到 HTTP ,这样您就可以保证您的 android 应用程序可以在所有 android 中运行。

于 2013-06-21T11:12:24.383 回答
0

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

根据文档的一个简单示例:

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);
于 2014-08-10T21:35:05.540 回答
0

您需要您的 android 客户端向您的网络服务发送 HTTP 请求。看看HttpURLConnection类。在这里,您可以快速了解android 中的 HTTP 客户端

于 2013-06-21T11:01:29.157 回答
0
Unmarshaller um;
JAXBContext jc = JAXBContext.newInstance(YourClass.class);
um = jc.createUnmarshaller();

URL url = new URL("http://localhost:8080/NutzungscodesMekacodesRESTful/rest/nc/");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
YourClass obj = (YourClass) um.unmarshal(con.getInputStream());
con.disconnect();
model.setXxx(obj.getData());

此外,在这种情况下,您必须注释您的类 (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;
于 2013-06-21T11:04:36.270 回答