如何通过HttpPost将数据作为表单发送到Android中的服务器?

时间:2012-05-02 14:38:18

标签: android xml http http-post

我正在开发一个android项目,我需要使用post方法将两个xml作为参数发送到服务器(即我想以表单形式发送)。我试图通过使用以下代码发送数据,但它无法正常工作。远程数据库中没有数据。

private void postFormData(List<DataItem> ti,String ex,String getExpensesXml)
{    
//Create a new Http Client 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(url); 
try
{ 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("sync","true"));
    nameValuePairs.add(new BasicNameValuePair("tt",ti));
    nameValuePairs.add(new BasicNameValuePair("te",ex)); 

    UrlEncodedFormEntity form; 
    form = new UrlEncodedFormEntity(nameValuePairs,"UTF-8");  
    httppost.setEntity(form); 

    HttpResponse response = httpclient.execute(httppost); 
    HttpEntity entity = response.getEntity();  
    String line = EntityUtils.toString(entity);    
    System.out.println(line);

} catch (ClientProtocolException e) {
       e.printStackTrace();
    } catch (IOException e) {
       e.printStackTrace();
    } 
}

我无法找到问题所在。如果有人设法找到问题并建议我解决方案,那就太好了。

我还有两个问题? 我在尝试正确的代码吗? 有没有其他方法通过Form发送xml数据到服务器?

提前致谢

2 个答案:

答案 0 :(得分:0)

最后我找到了解决方案,我使用以下代码将数据作为from发送到服务器

URL siteUrl;
    try {
        siteUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) siteUrl
                .openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setDoInput(true);

        DataOutputStream out = new DataOutputStream(conn.getOutputStream());
        String content1 = ""; 

        Set getkey = param.keySet();
        Iterator keyIter = getkey.iterator();
        String content = "";
        for (int i = 0; keyIter.hasNext(); i++) {
            Object key = keyIter.next();
            if (i != 0) {
                content += "&";
            }
            content += key + "=" + param.get(key);
            System.out.println("Content" + content);
        }

        System.out.println(content);
        out.writeBytes(content.trim());
        out.flush();
        out.close();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));
        String line = "";
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
        in.close();


    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    db.close();
}

对于像我这样的人来说,这可能会有所帮助。

答案 1 :(得分:0)

面临同样的问题。但最后设法将数据发布到服务器。您的代码绝对应该是这样的,除非您必须将String编码为Base64,然后将其传递给NameValuePair。在服务器端,您必须从String解码Base64。它会工作。如果需要,我可以共享代码。