【问题标题】:Android - Using HttpURLConnection to POST XML dataAndroid - 使用 HttpURLConnection 发布 XML 数据
【发布时间】:2015-05-14 21:59:27
【问题描述】:

我遇到了一些死胡同,需要一些帮助(请)!

我对 Android 开发(以及一般的编码)非常陌生。基本上我需要使用 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 会更好吗?

谢谢!

【问题讨论】:

    标签: android xml post httpurlconnection


    【解决方案1】:

    是的,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();
    }
    

    【讨论】:

    • 太棒了!多谢!我设法让它正确发布(在我发现我使用了上一个活动中错误的 Extras 变量名称后,哈哈)。
    【解决方案2】:

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

    您的帖子似乎被切断了,但从您所展示的内容来看,您所做的不是发布 XML,而是添加查询参数。

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

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

    您可以用您的 XML 字符串替换“查询”。

    【讨论】:

    • 非常感谢伙计!我为需要发布的 XML 数据创建了一个字符串,一旦我弄清楚 null 值的来源,它就可以很好地工作。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多