Android - 使用HttpURLConnection发布XML数据

时间:2015-05-14 21:59:27

标签: android xml post httpurlconnection

我遇到了一些困难,需要一些帮助(请)!

我对Android Dev(以及一般的编码)都很陌生。基本上我需要使用HttpURLConnection将XML数据发布到URL,但无法使其工作。我已经让我的应用程序读取并从GET请求中篡改XML数据,但发现POST部分很困难。

我已经看过创建一个NameValuePair数组,但不知道如何使用我需要发布的XML结构来执行此操作。

XML数据如下所示:

<Sheet>
  <Job>jobNumber</Job> 
  <Task>taskNumber</Task> 
  <UserID>3</UserID> 
  <Date>systemDateFormatted</Date> 
  <Minutes>timeToLog</Minutes> 
  <Note>userNote</Note>
</Sheet>

到目前为止,我已将此代码用于我的代码。

try {
        URL url = new URL(theUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setDoOutput(true);


        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("Sheet", null));
        params.add(new BasicNameValuePair("Job", jobNumber));
        params.add(new BasicNameValuePair("Task", taskNumber));
        params.add(new BasicNameValuePair("UserID", String.valueOf(yourUserID)));
        params.add(new BasicNameValuePair("Date", systemDateFormatted));
        params.add(new BasicNameValuePair("Minutes", timeElapsed));
        params.add(new BasicNameValuePair("UserNote", "Test Note"));
        params.add(new BasicNameValuePair("Sheet", null));

我不确定我是否正确理解了NamedValuePair。为我的XML数据创建字符串并以这种方式POST更好吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

是的,POST数据作为您请求的有效负载。例如

URL url = new URL(theUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
try {
    conn.setReadTimeout(10000);
    conn.setConnectTimeout(15000);
    conn.setRequestMethod("POST");
    conn.setDoInput(true);
    conn.setDoOutput(true);
    String body = "<xml...</xml>";
    OutputStream output = new BufferedOutputStream(conn.getOutputStream());
    output.write(body.getBytes());
    output.flush();
finally {
    conn.disconnect();
}

答案 1 :(得分:1)

  

我不确定我是否正确理解了NamedValuePair。为我的XML数据创建字符串并以这种方式POST更好吗?

您的帖子似乎被截断了,但是根据您所展示的内容,您不会发布XML,而是添加查询参数。

将XML转换为编码字符串,然后将其写入从conn.getOutputStream()获得的输出流。

以下是一个类似的例子:https://stackoverflow.com/a/2737455/1197251

您可以使用XML字符串替换“query”。