用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); }
相关推荐
教程名称:老罗Android开发视频教程汇总课程目录:【】android之http协议编程第1集:...android之http协议编程第4集:使用apache工具类提交数据【】andro 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
"安卓课程设计----基于Android Studio开发的笔记APP.zip" 是一个与安卓应用开发相关的项目,其中包含了使用Android Studio开发的一款笔记应用程序的完整源代码和可能的项目报告。这个项目可能是针对学生或者对安卓...
Android操作系统作为全球最广泛使用的移动平台之一,为开发者提供了丰富的工具和框架,使得创建各种类型的应用程序成为可能。本项目“校园助手应用程序”便是一个利用Android SDK进行开发的实用工具集合,旨在服务于...
6. **视图设计**: 使用JSP创建视图页面,利用Struts2的标签库进行数据绑定和表单提交。 7. **测试与调试**: 使用JUnit进行单元测试,确保每个功能正常运行,然后进行集成测试和系统测试。 8. **部署与上线**: 打包...
10. **性能和负载测试**:使用Apache JMeter、LoadRunner等工具模拟用户负载,检查系统在高压力下的表现。 11. **安全测试**:学习如何识别和修复应用程序中的安全漏洞,如SQL注入、XSS攻击等。 12. **移动应用...
在CSCI572的课程中,使用Java可能是因为其强大的库支持和丰富的工具生态系统,这对于处理复杂的数据分析和算法实现是很有帮助的。学生可能被要求编写程序来实现各种算法,如排序、搜索、图算法等,还可能涉及到更...
Java是一种广泛使用的面向对象的编程语言,它的应用领域包括桌面应用、移动应用(尤其是Android平台)、Web应用、企业级应用和大数据处理等。Java以其“写一次,到处运行”的跨平台特性而著名,其语法严谨,易于学习...
这需要数据聚合和分析,可利用Java的数据处理库如Apache POI和报表工具如JasperReports。 8. **移动兼容**:随着移动设备的普及,LMS也需要有良好的移动端适配,可能需要开发Android或iOS应用,或者采用响应式设计...
Java是一种广泛应用于服务器端开发、移动应用(尤其是Android平台)以及大数据处理的语言。它的特性包括面向对象、跨平台、安全性和高性能。学习Java,学生将接触到类、对象、接口、多线程、异常处理、集合框架、I/O...
【标题】"sk-projekat2"是一个与Java编程相关的项目,可能是一个课程作业、个人练习或小型应用开发。项目名称通常是开发者的命名约定,可能是为了标识项目的特定阶段、特性或者开发者自己的代号。 【描述】由于描述...