在URI中调用restful web service抛出错误

时间:2012-02-17 08:26:44

标签: android web-services restful-url

我写了一个逻辑,调用android webservice传递几个参数。问题是,当我发送查询它返回一个错误消息,我得到一个xml。我要打电话的网址是 http://192.168.1.10:8080/ymaws/resources/restaurantcityid=33498&areanm=vasant vihar 但是我得到了错误。代码如下。 Plz提出了一个很好的方法来做到这一点

String list = null;
                restaurantnames=new ArrayList<String> ();   
                areanames=new ArrayList<String>();
                restaurantidlist=new ArrayList<String>();

                final HttpClient client=new DefaultHttpClient();
                                    String url = "http://192.168.1.10:8080/ymaws/resources/restaurant?cityid="+cityid+"&areanm="+area.getSelectedItem().toString();
                String encodedurl = null;
                try
                {
                        encodedurl = URLEncoder.encode(url,"UTF-8");
                } 
                catch (UnsupportedEncodingException e1) 
                {
                        e1.printStackTrace();
                }
                Log.i("TEST", encodedurl);

                final HttpGet req=new HttpGet(encodedurl);
                HttpResponse httpResponse;
                try {
                        httpResponse=client.execute(req);
                        HttpEntity entity = httpResponse.getEntity();
                        Log.i("entity", entity.toString());
                        if (entity != null) 
                        {
                            InputStream instream = entity.getContent();
                            BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
                            StringBuilder sb = new StringBuilder();

                            String line = null;
                            try 
                            {
                                while ((line = reader.readLine()) != null) 
                                {
                                    sb.append(line + "\n");
                                }
                            } 
                            catch (IOException e) 
                            {
                                e.printStackTrace();
                            } 
                            finally 
                            {
                                try 
                                {
                                    instream.close();
                                }
                                catch (IOException e)
                                {
                                    e.printStackTrace();
                                }
                            }

                            // Closing the input stream will trigger connection release
                            list= sb.toString();
                            Log.i("list xml is", list.toString());

2 个答案:

答案 0 :(得分:0)

这可能需要您使用Apache开源库,但它在我的所有代码中都适用于我:

public static String getHTTP(String url) throws ClientProtocolException, IOException {
        String result = "";     
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet(url);
        ResponseHandler<String> responseHandler = new BasicResponseHandler();           

        // Execute HTTP Get Request
        result = httpclient.execute(httpget, responseHandler);
        return result;
}

所需的库是:

import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.ClientProtocolException;
import java.io.IOException;

您可以获取Apache Http Client jar here

答案 1 :(得分:0)

尝试简单地添加“amp;”在“&amp;”之后标志。 (不能写&amp; + amp;一起因为SO只是为了“&amp;”hehe):)