无法从我的Android应用程序执行HTTP发布到Web服务

时间:2010-09-08 00:25:13

标签: java android web-services json http-post

我一直在开发一个对Web服务使用GET和POST请求的应用程序。 GET请求没有问题,但POST请求正在扼杀我。我在代码中尝试了两种不同的场景。第一个看起来像这样......

 HttpClient httpclient = new DefaultHttpClient();  
 HttpPost httppost = new HttpPost(ws);  
 JSONObject jsonObject = new JSONObject();

 try {  
// Add your data  
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);  
jsonObject.put("action", "login");
jsonObject.put("username", "*********");
    jsonObject.put("password", "*********");

    httppost.setHeader("jsonString", jsonObject.toString());  
StringEntity se = new StringEntity( jsonObject.toString());    
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));  
httppost.setEntity(se); 


            // Execute HTTP Post Request  
            HttpResponse response = httpclient.execute(httppost);  
            textview.setText(getResponse(response.getEntity()));
        } catch (ClientProtocolException e) {  
            textview.setText(e.getLocalizedMessage());
        } catch (IOException e) {  
            textview.setText(e.getLocalizedMessage());
        } catch (JSONException e) {
            textview.setText(e.getLocalizedMessage());
        }

这段代码为我得到了这个结果......
“错误请求(标头名称无效)”

现在这是我的第二段代码......

 HttpClient httpclient = new DefaultHttpClient();  
      HttpPost httppost = new HttpPost(ws);  
      JSONObject jsonObject = new JSONObject();

        try {  
            // Add your data  
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);  
            jsonObject.put("action", "login");
            jsonObject.put("username", "******");
            jsonObject.put("password", "******");

            nameValuePairs.add(new BasicNameValuePair("jsonString", jsonObject.toString()));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));  

            // Execute HTTP Post Request  
            HttpResponse response = httpclient.execute(httppost);  

            textview.setText(getResponse(response.getEntity()));
        } catch (ClientProtocolException e) {  
            textview.setText(e.getLocalizedMessage());
        } catch (IOException e) {   
            textview.setText(e.getLocalizedMessage());
        } catch (JSONException e) {

        }

这给了我一个完全不同的结果。这是一个长期乱码的xml和SOAP,确实有一个SOAP异常... ... “服务器无法处理请求.--- System.Xml.XmlException:根级别的数据无效。第1行,第1位。”
现在,任何人都可以了解我做错了什么。

2 个答案:

答案 0 :(得分:2)

在你的第二段代码中添加::

   // Execute HTTP Post Request  
    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters, HTTP.UTF_8);
    httppost.setEntity(formEntity);
    HttpResponse response = httpclient.execute(httppost);   

答案 1 :(得分:0)

这有点旧,但我自己也有类似的问题。第一个例子是我走的路线;并且原始示例的问题是此行httppost.setHeader("jsonString", jsonObject.toString());。它正在添加服务器无法解析的请求标头。

此外,nameValuePairs的声明是不必要的。