2012-07-10 71 views
1

我可以使用HTTP post和response检索xml文件。但是,现在我需要发布String参数以及URL。下面的代码告诉我,HTTP staus代码是不正确的(即500),所以它返回null,然后我得到一个NullPointerException如何将参数发布到Android的Web服务?

package com.JobsWebService; 
import java.io.IOException; 
import java.io.Reader; 
import java.io.StringReader; 
import java.io.UnsupportedEncodingException; 
import java.util.ArrayList; 
import java.util.List; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.HttpStatus; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.protocol.HTTP; 
import org.apache.http.util.EntityUtils; 
import org.simpleframework.xml.Serializer; 
import org.simpleframework.xml.core.Persister; 
import android.util.Log; 

public class XmlConnection { 

private static final String url =   "http://www.accuservlite.com/AccumobileWS/TestService.asmx/RyanMB_GetJobs"; 
private DefaultHttpClient client = new DefaultHttpClient(); 
String param= "Johnny"; 

public List<NewJob> RyanMB_GetJobs() { 
    try { 
     String xmlData = retrieve(url); 
     Serializer serializer = new Persister(); 
     Reader reader = new StringReader(xmlData); 
     ArrayOfNewJob testService = serializer.read(ArrayOfNewJob.class, 
       reader, false); 
     Log.i("gary", "Worked"); 
     return testService.NewJob; 

    } catch (Exception e) { 
     Log.i("gary", e.toString()); 
    } 
    return null; 
} 

// method retrieve 
public String retrieve(String url) throws UnsupportedEncodingException { 

    List<NameValuePair> qparams = new ArrayList<NameValuePair>(); 
    qparams.add(new BasicNameValuePair("Johnny", "Johhny")); 

    UrlEncodedFormEntity postEntity = new UrlEncodedFormEntity(qparams, 
      HTTP.UTF_8); 

    HttpPost getRequest = new HttpPost(url); 

    getRequest.setEntity(postEntity); 

    try { 

     HttpResponse getResponse = client.execute(getRequest); 

     final int statusCode = getResponse.getStatusLine().getStatusCode(); 

     if (statusCode != HttpStatus.SC_OK) { 

      return null; 
     } 

     HttpEntity getResponseEntity = getResponse.getEntity(); 

     if (getResponseEntity != null) { 
      return EntityUtils.toString(getResponseEntity); 
     } 

    } catch (IOException e) { 
     Log.i("gary", "Error for URL " + url, e); 
     getRequest.abort(); 
    } 
    return null; 
} 

}

回答

0

500服务器错误,并没有给我的印象显然是错误的,此代码。您是否根据发布请求测试了服务器?服务器是否在给它一个名称值对时期待一个字符串?

您可以尝试使用Wfetch进行测试。

+0

此外,还有另一种有用的工具用于生成HTTP GET/POST/PUT/etc请求到服务器,我使用。它是[WizTools.org RESTClient](http://rest-client.googlecode.com/)。它是用java编写的,与平台无关。 – Prizoff 2012-07-10 17:33:55

0

要YOUT HttpPost对象添加POST参数,您将使用NameValuPair的列表:

List<NameValuePair> parameters = new ArrayList<NameValuePair>(); 
parameters.add(new BasicNameValuePair("name_param1", "value_param1")); 

而且这个参数添加到您的HttpPost:

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters); 
httpPost.setEntity(formEntity); 
+0

谢谢,这工作!我有“name_param1”错误。 – 2012-07-11 11:35:06

相关问题