--------- 部分实例
try {
HttpResponse response = client.execute(myget);
BufferedReader reader = new BufferedReader(
new InputStreamReader(response.getEntity()
.getContent()));
for (String s = reader.readLine(); s != null; s = reader
.readLine()) {
builder.append(s);
}
JSONObject jsonObject = new JSONObject(builder.toString());
error = jsonObject.getInt("errno");
String errormsg = jsonObject.getString("errmsg");
Log.v("wgp",myget.getURI().toString());
Log.v("wgp", "error=" + error);
Log.v("wgp", "errormsg=" + errormsg);
if (error == 0) {
array = jsonObject.getJSONArray("data");
mFavoriteList = new ArrayList<FavoriteItem>();
FavoriteItem item = null;
String srcType;
for (int i = 0; i < array.length(); i++) {
item = new FavoriteItem();
item.setId(array.getJSONObject(i).getInt("id"));
item.setUserId(array.getJSONObject(i).getInt("userid"));
item.setUsername(array.getJSONObject(i).getString("username"));
item.setType(array.getJSONObject(i).getInt("type"));
item.setCid(array.getJSONObject(i).getInt("cid"));
item.setTitle(array.getJSONObject(i).getString("title"));
item.setUrl(array.getJSONObject(i).getString("url"));
item.setTag(array.getJSONObject(i).getString("tag"));
item.setSrc(array.getJSONObject(i).getString("src"));
item.setCreateDate(array.getJSONObject(i).getString("created"));
item.setModifiedDate(array.getJSONObject(i).getString("modified"));
srcType = array.getJSONObject(i).getString("src_type");
if(srcType != null && srcType.equals("cps")){
item.setSrc_type("industry");
}else{
item.setSrc_type(srcType);
}
mFavoriteList.add(item);
}
if (mFavoriteList.size() == 0) {
handler.sendEmptyMessage(-1);
} else {
handler.sendEmptyMessage(1);//更新主UI
}
}
} catch (Exception e) {
e.printStackTrace();
handler.sendEmptyMessage(-1);
} finally {
}
=============
Android SDK集成了Apache HttpClient模块。要注意的是,这里的Apache HttpClient模块是 HttpClient 4.0(org.apache.http.*),而不是常见的 Jakarta Commons HttpClient 3.x(org.apache.commons.httpclient.*)。
HttpClient常用HttpGet和HttpPost这两个类,分别对应Get方式和Post方式。
无论是使用 HttpGet ,还是使用 HttpPost ,都必须通过如下 3 步来访问 HTTP 资源。
1. 创建 HttpGet 或 HttpPost 对象,将要请求的 URL 通过构造方法传入 HttpGet 或 HttpPost 对象。
2. 使用 DefaultHttpClient 类的 execute 方法发送 HTTP GET 或 HTTP POST 请求,并返回 HttpResponse 对象。
3. 通过 HttpResponse 接口的 getEntity 方法返回响应信息,并进行相应的处理。
如果使用 HttpPost 方法提交 HTTP POST 请求,则需要使用 HttpPost 类的 setEntity 方法设置请求参数。参数则必须用NameValuePair[]数组存储。
HttpGet
- 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;
- }
HttpPost
如果使用 HttpPost 方法提交 HTTP POST 请求,则需要使用 HttpPost 类的 setEntity 方法设置请求参数。参数则必须用NameValuePair[]数组存储。
- 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"
/>