61581229 发表于 2017-1-12 11:25:50

安卓课程十二 http使用apache工具类提交数据

  用HttpClient来提交或者获取server端的数据,但是Android自带的API还是有点不好用,所以自己根据自己的需要就做了一个包装,如下:
  HttpConnectionUtil类是一个工具类,其中提供了同步和异步方法,并且目前是支持http的Get和Post方法。

import java.io.BufferedReader;   
import java.io.IOException;   
import java.io.InputStreamReader;   
import java.io.UnsupportedEncodingException;   
import java.net.URLEncoder;   
import java.util.ArrayList;   
import java.util.List;   
import java.util.Map;   
import org.apache.http.HttpResponse;   
import org.apache.http.HttpStatus;   
import org.apache.http.NameValuePair;   
import org.apache.http.client.ClientProtocolException;   
import org.apache.http.client.HttpClient;   
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.client.methods.HttpUriRequest;   
import org.apache.http.impl.client.DefaultHttpClient;   
import org.apache.http.message.BasicNameValuePair;
import android.os.Handler;
import android.util.Log;
public class HttpConnectionUtil {   
public static enum HttpMethod {GET, POST}   
public void asyncConnect(final String url, final HttpMethod method, final HttpConnectionCallback callback) {   
asyncConnect(url, null, method, callback);   
}   
public void syncConnect(final String url, final HttpMethod method, final HttpConnectionCallback callback) {   
syncConnect(url, null, method, callback);   
}   
public void asyncConnect(final String url, final Map<String, String> params,   
final HttpMethod method, final HttpConnectionCallback callback) {   
Handler handler = new Handler();   
Runnable runnable = new Runnable() {   
public void run() {   
syncConnect(url, params, method, callback);   
}   
};   
handler.post(runnable);   
}   
public void syncConnect(final String url, final Map<String, String> params,   
final HttpMethod method, final HttpConnectionCallback callback) {   
String json = null;   
BufferedReader reader = null;   
try {   
HttpClient client = new DefaultHttpClient();   
HttpUriRequest request = getRequest(url, params, method);   
HttpResponse response = client.execute(request);   
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {   
reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));   
StringBuilder sb = new StringBuilder();   
for (String s = reader.readLine(); s != null; s = reader.readLine()) {   
sb.append(s);   
}   
json = sb.toString();   
}   
} catch (ClientProtocolException e) {   
Log.e("HttpConnectionUtil", e.getMessage(), e);   
} catch (IOException e) {   
Log.e("HttpConnectionUtil", e.getMessage(), e);   
} finally {   
try {   
if (reader != null) {   
reader.close();   
}   
} catch (IOException e) {   
// ignore me   
}   
}
if(callback!= null){
callback.execute(json);
}
}   
private HttpUriRequest getRequest(String url, Map<String, String> params, HttpMethod method) throws UnsupportedEncodingException {   
if (method.equals(HttpMethod.POST)) {   
List<NameValuePair> listParams = new ArrayList<NameValuePair>();   
if (params != null) {   
for (String name : params.keySet()) {   
listParams.add(new BasicNameValuePair(name, params.get(name)));   
}   
}   
try {   
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(listParams);   
HttpPost request = new HttpPost(url);   
request.setEntity(entity);   
return request;   
} catch (UnsupportedEncodingException e) {   
// Should not come here, ignore me.   
throw new java.lang.RuntimeException(e.getMessage(), e);   
}   
} else {   
if (url.indexOf("?") < 0) {   
url += "?";   
}   
if (params != null) {   
for (String name : params.keySet()) {
url += "&" + name + "=" + URLEncoder.encode(params.get(name),"UTF-8");   
}   
}
HttpGet request = new HttpGet(url);   
return request;   
}   
}   
}   
  接口HttpConnectionCallback

public interface HttpConnectionCallback {
/**   
* Call back method will be execute after the http request return.   
* @param response the response of http request.   
* The value will be null if any error occur.   
*/   
void execute(String response);   
}
页: [1]
查看完整版本: 安卓课程十二 http使用apache工具类提交数据