不管是使用HttpGet,仍是使用HttpPost,都必须经过以下3步来访问HTTP资源。java
1.建立HttpGet或HttpPost对象,将要请求的URL经过构造方法传入HttpGet或HttpPost对象。
android
2.使用DefaultHttpClient类的execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。数组
3.经过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。网络
若是使用HttpPost方法提交HTTP POST请求,则须要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。spa
HttpGetcode
public String doGet() { String uriAPI = "http://XXXXX?str=I+am+get+String"; String result= ""; // HttpGet httpRequst = new HttpGet(URI uri); // HttpGet httpRequst = new HttpGet(String uri); // 建立HttpGet或HttpPost对象,将要请求的URL经过构造方法传入HttpGet或HttpPost对象。 HttpGet httpRequst = new HttpGet(uriAPI); // new DefaultHttpClient().execute(HttpUriRequst requst); try { //使用DefaultHttpClient类的execute方法发送HTTP GET请求,并返回HttpResponse对象。 HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst);//其中HttpGet是HttpUriRequst的子类 if(httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity httpEntity = httpResponse.getEntity(); result = EntityUtils.toString(httpEntity);//取出应答字符串 // 通常来讲都要删除多余的字符 result.replaceAll("\r", "");//去掉返回结果中的"\r"字符,不然会在结果字符串后面显示一个小方格 } else httpRequst.abort(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } return result; }
HttpPostorm
若是使用HttpPost方法提交HTTP POST请求,则须要使用HttpPost类的setEntity方法设置请求参数。参数则必须用NameValuePair[]数组存储。xml
public String doPost() { String uriAPI = "http://XXXXXX";//Post方式没有参数在这里 String result = ""; HttpPost httpRequst = new HttpPost(uriAPI);//建立HttpPost对象 List <NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("str", "I am Post String")); try { httpRequst.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8)); HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequst); if(httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity httpEntity = httpResponse.getEntity(); result = EntityUtils.toString(httpEntity);//取出应答字符串 } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); result = e.getMessage().toString(); } return result; }
以发送链接请求时,须要设置连接超时和请求超时等参数,不然会长期中止或者崩溃。对象
HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, 10*1000);//设置请求超时10秒 HttpConnectionParams.setSoTimeout(httpParameters, 10*1000); //设置等待数据超时10秒 HttpConnectionParams.setSocketBufferSize(params, 8192); HttpClient httpclient = new DefaultHttpClient(httpParameters); //此时构造DefaultHttpClient时将参数传入 因为是联网,在AndroidManifest.xml中添加网络链接的权限 <uses-permission android:name="android.permission.INTERNET"/>