android h5开发框架开发一般都使用什么框架

32309人阅读
Android(29)
1、volley&
项目地址 /smanikandan14/Volley-demo
&(1)& JSON,图像等的异步下载;
&(2)& 网络请求的排序(scheduling)
&(3)& 网络请求的优先级处理
&(4)& 缓存
&(5)& 多级别取消请求
&(6)& 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)
2、android-async-http&&
项目地址:/loopj/android-async-http
文档介绍:/android-async-http/&
&(1) 在匿名回调中处理请求结果
&(2) 在UI线程外进行http请求
&(3) 文件断点上传
&(4) 智能重试
&(5) 默认gzip压缩
&(6) 支持解析成Json格式
&(7) 可将Cookies持久化到SharedPreferences
3、Afinal框架
项目地址:/yangfuhai/afinal
主要有四大模块:
&(1) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
&(2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。
&(3) 网络模块:通过httpclient进行封装http数据请求,支持ajax方式加载,支持下载、上传文件功能。
&(4) 图片缓存模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
&&&&&&&&&&&& FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,
&&&&&&&&&&&& 没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),
&&&&&&&&&&&& 更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,
&&&&&&&&&&&& 在imageview显示图片的时候播放动画等(默认是渐变动画显示)。
4、xUtils框架
项目地址:/wyouflf/xUtils
主要有四大模块:
& (1) 数据库模块:android中的orm框架,一行代码就可以进行增删改查;
&&&&&&&&&&& 支持事务,默认关闭;
&&&&&&&&&&& 可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
&&&&&&&&&&& 支持绑定外键,保存实体时外键关联实体自动保存或更新;
&&&&&&&&&&& 自动加载外键关联实体,支持延时加载;
&&&&&&&&&&& 支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。&&&&&&&&&&
& (2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
&&&&&&&&&&& 新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
&&&&&&&&&&& 目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
& (3) 网络模块:支持同步,异步方式的请求;
&&&&&&&&&&& 支持大文件上传,上传大文件不会oom;
&&&&&&&&&&& 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
&&&&&&&&&&& 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
&&&&&&&&&&& 返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。&&&&&&&&&&&&
& (4) 图片缓存模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
&&&&&&&&&&& 支持加载网络图片和本地图片;
&&&&&&&&&&& 内存管理使用lru算法,更好的管理bitmap内存;
&&&&&&&&&&& 可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
5、ThinkAndroid
项目地址:/white-cat/ThinkAndroid
主要有以下模块:
& (1)& MVC模块:实现视图与模型的分离。
& (2)& ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。&
& (3)& 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。&&
& (4)& http模块:通过httpclient进行封装http数据请求,支持异步及同步方式加载。
& (5)& 缓存模块:通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
& (6)& 图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
& (7)& 配置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取。
& (8)& 日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印
& (9)& 下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进行控制、如开始、暂停、删除等等。
& (10) 网络状态检测模块:当网络状态改变时,对其进行检
6、LoonAndroid&
项目地址:/gdpancheng/LoonAndroid
主要有以下模块:
& (1)& 自动注入框架(只需要继承框架内的application既可)
& (2)& 图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)
& (3)& 网络请求模块(继承了基本上现在所有的http请求)
& (4)& eventbus(集成一个开源的框架)
& (5)& 验证框架(集成开源框架)
& (6)& json解析(支持解析成集合或者对象)
& (7)& 数据库(不知道是哪位写的 忘记了)
& (8)& 多线程断点下载(自动判断是否支持多线程,判断是否是重定向)
& (9)& 自动更新模块
& (10) 一系列工具类
7、KJFrameForAndroid
项目地址:
github项目地址:
备用项目地址:
KJFrameForAndroid&又叫KJLibrary,是一个android的orm
和 ioc 框架。同时封装了android中的Bitmap与Http操作的框架,使其更加简单易用;
KJFrameForAndroid的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全的开发APP。我们提倡用最少的代码,完成最多的操作,用最高的效率,完成最复杂的功能。
同时,KJFrameForAndroid是免费的、开源的、简易的、遵循Apache Licence 2.0开源协议发布的android应用开发框架,总共分为五大模 块:UILibrary,UtilsLibrary,HttpLibrary,BitmapLibrary,DBLibrary。
8、Annotations
xUtils是国内比较火的快速开发框架,但是它的注解机制不是太稳定而且注解可选也比较少,国外的一个框架主要专注于注解的开发,简化Android代码编写,它除了有依赖注入的特性以外,还集成了Ormlite,Spring-android中的REST模板。使用起来非常方便,大大提高了开发效率。
1.下载Annotations:
&git官网:
项目中重要的两个jar包分别是:androidannotations-api-3.0.1.jar和androidannotations-3.0.1.jar
2.新建一个android项目,然后将androidannotations-api-3.0.1.jar复制到libs目录下,在项目的根目录新建一个文件夹,命名为compile-libs,然后将androidannotations-3.0.1.jar复制到该目录下
3.在你的工程上右键单击,在弹出的菜单中选择&Properties&,找到Java
Compiler,确保Compiler compliance level设置为1.6,否则的话处理器将不起作用
4.然后设置项目属性:右键-&Properties-&Java Compiler-&Annotation Processing 在该页面选中Enable project specific settings。
5.转到Java Compiler 中的 Annotation Processing 下边的 Factory Path,在此将androidannotations-3.0.1.jar添加到其中。
注解1:@ViewById 与findViewById功能相似,如果ViewById后没有设置资源ID的话,就是自动查找与变量名称相同的id资源。
注解2:@Click 点击事件处理的注解。
注解3:@UiThread 后台Ui线程的注解,省去了Handler等等。
注解4:@EActivity 提示Activity的注解,注意,该注解将Activity编译成Activity_,注意,多一个下划线“_”,因此在AndroidManifest.xml文件中需要将其添加下滑线
注解5:@AfterViews 是指View类注入完毕之后执行的代码。
常用效果:
异步加载图片,缓存,生成缩略图, 基本上每个应用都会需要这个lib。
& & android-query框架
&类似新浪微博,twitter,下拉刷新列表, 更牛的是还支持上拉加载更多。 不仅仅是ListView,而且GridView也支持。
3.&&和&/dmitry-zaitsev/AndroidSideMenu&导航抽屉&
& &/SimonVT/android-menudrawer&导航抽屉&
与/JakeWharton/ActionBarSherlock & &actionbar.
ListView导航特效
6&&gallery抽奖效果
GridView错位效果/youxiachai/pinterest-like-adapter-view
8&/47deg/android-swipelistview &实现了自定义ListView单元格,可通过滑动来显示扩展面板。
9&/siyamed/android-satellite-menu
&有一连串的按钮弹出
10&/maurycyw/StaggeredGridView&交错排列的GridView
/dodola/android_waterfall&&/youxilua/waterfall4android
/dodola/WaterFallExt
11 /daizhenjun/ImageFilterForAndroid
&图片处理效果
12&/nostra13/Android-Universal-Image-Loader
异步加载图片,万能图片加载 ListView GridView ImagePage ImageGaller
实例:http://blog.csdn.net/banketree/article/details/8004475
13&/JakeWharton/Android-ViewPagerIndicator
有标题页面滑动效果
14&/pakerfeldt/android-viewflow
ViewFlow图片滑动
13&&滚轮效果
14 /android-2-1.html
一个很好的快速开发的框架, 大量使用annotation来代替,类似于RoboGuice
2 ormlite sqlite的orm框架 /
3 汉字转拼音 pinyin4j 与 hanziTopinyin
4 AACPlayer
5 GSON json框架 fastjson
6 Otto&是Android系统的一个Event Bus模式类库。用来简化应用组件间的通信。
7&afinal框架是一个开源的android的orm和ioc应用开发框架
8&xUtils&源于Afinal框架&对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持
&XML解析器
10&一种无提取的XML解析方法&&
11 android XMPP推送&
12&jsoup网络爬虫
14 VLC 视频聊天
16&SPydroid&
:就一个播放器,但是实现的很好
:oschina网站的客户端哦,wp版,iOS版都有开源
:不评价了,反正算是同类中比较好的了
:今天才知道是开源的,赶紧收藏
:谷歌开发者大会应用,虽然有点难懂,还是很有参考价值(比如其中的图片加载)
:eoe网站Android客户端也开源咯
:可以实现类似FlipBoard那种华丽丽的翻页
:可以拖动item重新排序的listview,效果非常赞
:咳咳,有些同学非常喜欢Android的holo风格,这个项目绝对让你happy
:这个经典的异步图片加载,不多说了
:这玩意可以让ViewPager翻起来更酷,谁用谁知道~~
:这个是抽屉界面(就是facebook那种)的各种实现版本中,最好的,木有之一!
:iPhone上经常有这个,就是listview的……不知道怎么解释,自己下载看看吧
:下拉刷新,挺常用的一个组件
:这是一个瀑布流布局的实现,还不是很完善,但作为学习的案例或者在其基础上扩展还是不错的
:android的异步请求组件,我个人习惯使用asynctask,不过这个实现还是很优秀的,也推荐给大家
:大家熟知的ActionBar在2.x上的兼容性方案;类似的兼容性组件还有许多,有时间为大家一一列出;
:不止是一个SDK那么简单哦,比某浪和某人的SDK强几个数量级;
:想在2.xSDK上使用Android
3.0新增的动画API,那就是它了;没用过的同学一定要试试哦,非常方便~
:让listview的item可以向右滑动,新版Gmail和Pocket里面有用到哦~
:Android的RESTful封装,没听过RESTful?你去死吧
:和上面的DataDroid同样属于美化底层代码的,这个lib简化了不同组件之间的事件传递
:Android3.0以上才有的switch,有好心人给迁移到2.x上了,哈
:最新版的GooglePlay的那个tab效果,可炫可炫了
:我们都知道webview,也知道Android的chrome又自己的内核,这个项目就是把chrome的内核给导出来做成一个chromeview了,大家可以在自己的项目里用,有兴趣的可以玩玩
:来自square的图片异步加载,好像是最近才开源的,API风格很独特
:各种项目很多,就是不容易挖掘,但是开发者必备
:曾经一般,现在越做越好了,很多开源项目;
:经过一番整理,现在非常强大;小作品居多;
:我曾经想做这么一个网站来着,很多开源组件的集合
图片处理框架:
图片模糊处理:
PDF框架: IText &MuPDF &com/sun/pdfview &com.lowagie.text()
网友使用:
点击按钮水波纹扩散Demo:
AChartEngine(简称ACE)是Google的一个开源图表库(for Android)。它功能强大,支持散点图、折线图、饼图、气泡图、柱状图、短棒图、仪表图等多种图表。
该项目地址位于:&
开源的 Material Design 豆瓣客户端(A Material Design app
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:242304次
积分:1764
积分:1764
排名:第15474名
原创:34篇
转载:33篇
评论:37条
(2)(1)(3)(1)(5)(1)(1)(1)(1)(7)(3)(3)(1)(2)(15)(10)(1)(5)(2)Android开发使用AndBase框架完成Http请求-安卓教程-手机开发-壹聚教程网Android开发使用AndBase框架完成Http请求
ndbase是为Android开发者量身打造的一款开源类库产品,本文我们介绍使用AndBase框架实现无参Http Get请求,有参Http Post请求,有参Http Get请求。
AndBase框架为我们提供了一些相关的方法提供给我们使用,用来完成Http网络请求...总体就是对Http请求的一个封装,不过个人认为,网络请求这一模块更加推荐使用Volley框架..楼主对比了两个框架中的源码...Volley更多的地方是使用抽象方法封装在接口内,然后对外暴露接口,其他类在实现接口的同时需要实现内部的抽象方法...而AndBase则是使用继承的方式..继承父类..实现类通过重写的方式对封装的方法重写从而进行下一步的操作...相比二者网络请求的源码,Volley源码的书写还是更胜一筹...Volley是Google推出的,针对的也仅仅是网络请求这一模块...同样AndBase也是非常优秀的,是国内牛人写的一款重量级框架,涉及的模块非常的广泛,还是非常好用的...1.使用AndBase框架实现无参Http Get请求...一般普通的网络请求如果不涉及到数据信息的变化,也就是不涉及一些安全性问题,都可以使用Get方式来完成网络请求...Get请求也是分为有参和无参的,给我的感觉有参一般可以用于向服务器上传资源数据...先介绍一下无参的Get请求...还是先从源码的地方来看看...源码的调用方式是先使用AbHttpUtils.get()函数调用...不过这无关紧要...通过这个方法走向AbHttpClient类内部...执行下面这段源码...无论是有参还是无参..都会调用这个方法..无参的时候第二个参数传递null就行了...public void get(final String url,final AbRequestParams params,final AbHttpResponseListener responseListener) {&&&&&& &&&&&&&& responseListener.setHandler(new ResponderHandler(responseListener));&&&&&&& executorService.submit(new Runnable() { &&&&&&&&&&& public void run() {&&&&&&&&&&&&&&& try {&&&&&&&&&&&&&&&&&&& doGet(url,params,responseListener);&&&&&&&&&&&&&&& }
(Exception e) { &&&&&&&&&&&&&&&&&&& e.printStackTrace();&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&&&&&&&&&& &&&&&&&& });&&&&&&&&&&&&&& &&&& }我们可以看到,这段函数首先通过Handler发送Message...同时开启一个线程池,来提交当前的请求...最后将执行doGet()方法...同时Handler一直对responseListener的消息进行处理..doGet()方法的源码过程如下...private void doGet(String url,AbRequestParams params,AbHttpResponseListener responseListener){&&&&&&&&& try {&&&&&&&&&&&& &&&&&&&&&&&&&& responseListener.sendStartMessage();&&&&&&&&&&&& &&&&&&&&&&&&&& if(!debug && !AbAppUtil.isNetworkAvailable(mContext)){&&&&&&&&&&&&&&&&&&& responseListener.sendFailureMessage(AbConstant.CONNECT_FAILURE_CODE,AbConstant.CONNECTEXCEPTION, new AbAppException(AbConstant.CONNECTEXCEPTION));&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&& &&&&&&&&&&&&&& //HttpGet连接对象 &&&&&&&&&&&&&& if(params!=null){&&&&&&&&&&&&&&&&& url += params.getParamString(); //如果有参,那么获取相关参数...&&&&&&&&&&&&& }&&&&&&&&&&&&& HttpGet httpRequest = new HttpGet(url); //定义连接对象..&&&&&&&&&&&& &&&&&&&&&&&&&& BasicHttpParams httpParams = new BasicHttpParams();&&&&&&&&&&&& &&&&&&&&&&&&&& // 从连接池中取连接的超时时间,设置为1秒&&&&&&&&&&&&& ConnManagerParams.setTimeout(httpParams, DEFAULT_SOCKET_TIMEOUT);&&&&&&&&&&&&& ConnManagerParams.setMaxConnectionsPerRoute(httpParams, new ConnPerRouteBean(DEFAULT_MAX_CONNECTIONS));&&&&&&&&&&&&& ConnManagerParams.setMaxTotalConnections(httpParams, DEFAULT_MAX_CONNECTIONS);&&&&&&&&&&&&& // 读响应数据的超时时间&&&&&&&&&&&&& HttpConnectionParams.setSoTimeout(httpParams, DEFAULT_SOCKET_TIMEOUT);&&&&&&&&&&&&& HttpConnectionParams.setConnectionTimeout(httpParams, DEFAULT_SOCKET_TIMEOUT);&&&&&&&&&&&&& HttpConnectionParams.setTcpNoDelay(httpParams, true);&&&&&&&&&&&&& HttpConnectionParams.setSocketBufferSize(httpParams, DEFAULT_SOCKET_BUFFER_SIZE);&&&&&&&&&&&&& //设置协议版本...&&&&&&&&&&&&& HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);&&&&&&&&&&&&& HttpProtocolParams.setUserAgent(httpParams, String.format(&andbase-http/%s (http://www.418log.org/)&, 1.0));&&&&&&&&&&&&& // 设置请求参数&&&&&&&&&&&&& httpRequest.setParams(httpParams);&&&&&&&&&&&& &&&&&&&&&&&&&& //取得HttpClient对象 &&&&&&&&&&&&&& HttpClient httpClient = new DefaultHttpClient(); &&&&&&&&&&&&&& //请求HttpClient,取得HttpResponse &&&&&&&&&&&&&& HttpResponse httpResponse = httpClient.execute(httpRequest); &&&&&&&&&&&&&& //请求成功 &&&&&&&&&&&&&& int statusCode = httpResponse.getStatusLine().getStatusCode();&&&&&&&&&&&& &&&&&&&&&&&&&& //取得返回的字符串 &&&&&&&&&&&&&& HttpEntity& mHttpEntity = httpResponse.getEntity();&&&&&&&&&&&&& if (statusCode == HttpStatus.SC_OK){ &&&&&&&&&&&&&&&&&& if(responseListener instanceof AbStringHttpResponseListener){&&&&&&&&&&&&&&&&&&&&& String content = EntityUtils.toString(mHttpEntity);&&&&&&&&&&&&&&&&&&&&& ((AbStringHttpResponseListener)responseListener).sendSuccessMessage(statusCode, content);&&&&&&&&&&&&&&&&& }else if(responseListener instanceof AbBinaryHttpResponseListener){&&&&&&&&&&&&&&&&&&&&& readResponseData(mHttpEntity,((AbBinaryHttpResponseListener)responseListener));&&&&&&&&&&&&&&&&& }else if(responseListener instanceof AbFileHttpResponseListener){&&&&&&&&&&&&&&&&&&&&& //获取文件名&&&&&&&&&&&&&&&&&&&&& String fileName = AbFileUtil.getFileNameFromUrl(url, httpResponse);&&&&&&&&&&&&&&&&&&&&& writeResponseData(mHttpEntity,fileName,((AbFileHttpResponseListener)responseListener));&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&& }else{&&&&&&&&&&&&&&&&& String content = EntityUtils.toString(mHttpEntity);&&&&&&&&&&&&&&&&& responseListener.sendFailureMessage(statusCode, content, new AbAppException(AbConstant.UNKNOWNHOSTEXCEPTION));&&&&&&&&&&&&& }&&&&&&& } catch (Exception e) {&&&&&&&&&&& e.printStackTrace();&&&&&&&&&&& //发送失败消息&&&&&&&&&&& responseListener.sendFailureMessage(AbConstant.UNTREATED_CODE,e.getMessage(),new AbAppException(e));&&&&&&& }finally{&&&&&&&&&&& responseListener.sendFinishMessage();&&&&&&& }&&& }&& &有了上面的源码调用过程其实就非常的清晰了..无论是doGet()方法还是doPost()方法模式基本是相同的,都是需要先建立一个连接对象,HttpGet或HttpPost..不同之处在于有参的Get请求直接将params加入到url后面即可,而Post请求需要获取实体数据..在实体数据中加入我们传递的params..设置连接过程和读取数据过程中的相关参数,比如说超时的时间,使用的Http版本,设置UserAgent等等...设置完之后执行请求获取响应了...中间涉及到了一个判断的过程..判断返回的响应数据到底属于什么类型的数据,是基本的String类型,还是与图片或者视频相关的Byte类型,还是与文件相关的File类型...通过对相关类型的判断,执行不同的方法,虽然方法不相同,但是最后的目的是一样的,都是把实体数据进行封装...封装完毕后调用sendSuccessMessage然后Handler自动回去处理Message...最后调用OnSuccess方法..将数据返回给客户端..还是看一下实际的调用过程...无参的Get请求调度...这里需要设置相应监听...public void FileClick(View v){&&& url=&http://192.168.199.172:8080/JSP/imageview.jpg&;&&& getView();&&& httpUtil.get(url, new FileResponseListener(this, this, v,max_tv,num_tv,progressBar));}GetResponseListener.java对响应的监听的一个重写过程...通过为请求设置上url+相关监听就能够完成网络请求,并对请求数据进行相关处理了...这里完成了一个图片数据的下载,然后通过对数据进行封装,就成了一个Bitmap..这样就能够在控件上进行显示了..package com.example.import java.io.Fimport android.app.AlertDimport android.content.Cimport android.content.DialogIimport android.content.DialogInterface.OnClickLimport android.graphics.Bimport android.view.Vimport android.widget.ImageVimport android.widget.TextVimport com.ab.activity.AbAimport com.ab.http.AbFileHttpResponseLimport com.ab.util.AbFileUimport com.ab.view.progress.AbHorizontalProgressBpublic class FileResponseListener extends AbFileHttpResponseListener{&& &&&& private int max=100;&&& private int progress=0;&&& private AbA&&& private C&&& private AlertD&&& private V&&& private TextView max_tv,num_&&& private AbHorizontalProgressBar progressB&& &&&& public FileResponseListener(AbActivity activity,Context context,View v,TextView v1,TextView v2, AbHorizontalProgressBar progressBar ){&&&&&&& this.activity=&&&&&&& this.context=&&&&&&& this.view=v;&&&&&&& this.max_tv=v1;&&&&&&& this.num_tv=v2;&&&&&&& this.progressBar=progressB&&& }&& &&&& @Override&&& public void onSuccess(int statusCode, File file){&&&&&&& Bitmap bitmap=AbFileUtil.getBitmapFromSD(file);&&&&&&& ImageView view=new ImageView(context);&&&&&&& view.setImageBitmap(bitmap);&&&&&&& activity.showDialog(&返回结果&, view, new OnClickListener() {&&&&&&&&&& &&&&&&&&&&&& @Override&&&&&&&&&&& public void onClick(DialogInterface dialog, int which) {&&&&&&&&&&&&&&& // TODO Auto-generated method stub&&&&&&&&&&&&&& &&&&&&&&&&&& }&&&&&&& });&&& }&& &&&& @Override&&& public void onFailure(int statusCode, String content,Throwable error){&&&&&&& activity.showToast(error.toString());&&& }&& &&&& @Override&&& public void onStart(){&&&&&&& max_tv.setText(progress+&/&+String.valueOf(max));&&&&&&& progressBar.setMax(max);&&&&&&& progressBar.setProgress(progress);&&&&&&& dialog=activity.showDialog(&正在下载&, view);&&& }&& &&&& @Override&&& public void onProgress(int bytesWritten, int totalSize){&&&&&&& max_tv.setText(bytesWritten/(totalSize/max)+&/&+max);&&&&&&& progressBar.setProgress(bytesWritten/(totalSize/max));&&& }&& &&&& @Override&&& public void onFinish(){&&&&&&& dialog.cancel();&&&&&&& dialog=&&& }}2.使用AndBase框架实现有参Http Post请求...其实调用的方式都是相同的,,只不过Post请求需要传递相关的参数...使用有参的Post请求...这里是向一个JSP传递相关参数来完成数据信息的验证...public void PostClick(View v){&&& url=&http://192.168.199.172:8080/JSP/post.jsp&;&&& params=new AbRequestParams();&&& params.put(&name&, &darker&);&&& params.put(&password&, &&);&&& httpUtil.post(url, params, new PostResponseListener(this));}&& &这里我就不粘贴PostResponseListener的代码了...贴一下JSP页面的代码..相关的JSP代码如下...这里的JSP代码非常的简单..并且前面在使用Volley的时候也使用过..JSP页面我们完全可以自己书写的更加复杂一些,那么就能够实现更多的功能...&%& String name=.getParameter(&name&);& String password=request.getParameter(&password&);& if(&darker&.equals(name)&& &&.equals(password)){&&&&& out.println(&Receive name is:&+name);&&& out.println(&Receive password is:&+password);%&&&& Your Message are right!& &%}else{&&&&& out.println(&Receive name is:&+name);&&& out.println(&Receive password is:&+password);%&&&& Your Message are wrong!& &%}%& &3.使用AndBase框架实现有参Http Get请求...有参的Get请求一般用于文件,数据资源的上传...将上传的资源以及名称作为参数传递给服务器..这里不涉及安全上的问题..因此可以使用带有参数的Get请求...这里向服务器上传文件..需要添加相关参数...public void FileLoadClick(View v){&&&&&&& url=&http://192.168.199.172:8080&;&&&&&&& AbRequestParams params = new AbRequestParams(); &&&&&&& File pathRoot = Environment.getExternalStorageDirectory();&&&&&&& String path = pathRoot.getAbsolutePath();&&&&&&& File file1 = new File(path+&/download/cache_files/aa.txt&);&&&&&&& params.put(file1.getName(),file1);&&&&&& &&&&&&&& getView();&&&&&&& httpUtil.get(url, params, new FileSendResponseListener(this, this, v, max_tv, num_tv, progressBar));&&& }这里的监听事件简单的粘贴一下...监听事件之所以传递控件..是为了更好的向用户进行展示...这里设置了一个进度条的方式,来贯穿整个请求――响应的过程...如果下载或者是上传的文件和资源过多...我们是必须通知用户相关进度的..总不能一直卡死在界面上..这样用户也无法知道到底是否完成了数据的上传或者是下载...package com.example.import android.app.AlertDimport android.content.Cimport android.view.Vimport android.widget.TextVimport com.ab.activity.AbAimport com.ab.http.AbStringHttpResponseLimport com.ab.view.progress.AbHorizontalProgressBpublic class FileSendResponseListener extends AbStringHttpResponseListener{&&& private int max=100;&&& private int progress=0;&&& private AbA&&& private C&&& private AlertD&&& private V&&& private TextView max_tv,num_&&& private AbHorizontalProgressBar progressB&& &&&& public FileSendResponseListener(AbActivity activity,Context context,View v,TextView v1,TextView v2, AbHorizontalProgressBar progressBar ){&&&&&&& this.activity=&&&&&&& this.context=&&&&&&& this.view=v;&&&&&&& this.max_tv=v1;&&&&&&& this.num_tv=v2;&&&&&&& this.progressBar=progressB&&& }&& &&&& @Override&&& public void onSuccess(int statusCode, String content){&&&&&&& activity.showToast(&OnSuccess&);&&&&&&& System.out.println(content);&&& }&& &&&& @Override&&& public void onFailure(int statusCode, String content,Throwable error){&&&&&&& activity.showToast(error.toString());&&& }&& &&&& @Override&&& public void onStart(){&&&&&&& max_tv.setText(progress+&/&+String.valueOf(max));&&&&&&& progressBar.setMax(max);&&&&&&& progressBar.setProgress(progress);&&&&&&& activity.showToast(&正在下载&);&&&&&&& dialog=activity.showDialog(&正在下载&, view);&&& }&& &&&& @Override&&& public void onProgress(int bytesWritten, int totalSize){&&&&&&& max_tv.setText(bytesWritten/(totalSize/max)+&/&+max);&&&&&&& progressBar.setProgress(bytesWritten/(totalSize/max));&&& }&& &&&& @Override&&& public void onFinish(){&&&&&&& dialog.cancel();&&&&&&& dialog=&&& }}涉及到的类为com.ab.http保内的所有类...1.AbStringHttpResponseListener.java2.AbBinaryHttpResponseListener.java3.AbFileHttpResponseListener.java这三个类是对AbHttpResponseListener.java的一个继承...继承了其内部的一些相关方法..包括请求开始,结束,失败等等函数...AbHttpClient.java就是用来完成请求――连接过程的实现...其中还包含数据的封装..AbHttpUtils.java则是对post,get等方法调用的一个中间层...AbRequestParams.java 则是对请求参数处理的一个类...不仅包含对请求参数的处理,还包含对实体的创建..为实体添加相关参数等方法的实现过程...Android Http 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方法设置请求参数。实例代码如下:package mobile.android.ch13.import java.util.ArrayLimport java.util.Limport org.apache.http.HttpRimport org.apache.http.NameValuePimport org.apache.http.client.entity.UrlEncodedFormEimport org.apache.http.client.methods.HttpGimport org.apache.http.client.methods.HttpPimport org.apache.http.impl.client.DefaultHttpCimport org.apache.http.message.BasicNameValuePimport org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUimport android.app.Aimport android.os.Bimport android.view.Vimport android.view.View.OnClickLimport android.widget.Bimport android.widget.EditTimport android.widget.TextVpublic class Main extends Activity implements OnClickListener{&& &@Override&& &public void onClick(View view)&& &{&& &&& &String url = &http://172.22.20.194:8080/querybooks/QueryServlet&;&& &&& &TextView tvQueryResult = (TextView) findViewById(R.id.tvQueryResult);&& &&& &EditText etBookName = (EditText) findViewById(R.id.etBookName);&& &&& &HttpResponse httpResponse =&& &&& &try&& &&& &{&& &&& &&& &&& &&& &&& &switch (view.getId())&& &&& &&& &{&& &&& &&& &&& &case R.id.btnGetQuery:&& &&& &&& &&& &&& &url += &?bookname=& + etBookName.getText().toString();&& &&& &&& &&& &&& &HttpGet httpGet = new HttpGet(url);&& &&& &&& &&& &&& &httpResponse = new DefaultHttpClient().execute(httpGet);&& &&& &&& &&& &&& &if (httpResponse.getStatusLine().getStatusCode() == 200)&& &&& &&& &&& &&& &{&& &&& &&& &&& &&& &&& &&& &&& &&& &&& &&& &&& &String result = EntityUtils.toString(httpResponse&& &&& &&& &&& &&& &&& &&& &&& &.getEntity());&& &&& &&& &&& &&& &&& &tvQueryResult.setText(result.replaceAll(&\r&, &&));&& &&& &&& &&& &&& &}&& &&& &&& &&& &&& &&& &&& &&& &&& &case R.id.btnPostQuery:&& &&& &&& &&& &&& &HttpPost httpPost = new HttpPost(url);&& &&& &&& &&& &&& &List&NameValuePair& params = new ArrayList&NameValuePair&();&& &&& &&& &&& &&& &params.add(new BasicNameValuePair(&bookname&, etBookName&& &&& &&& &&& &&& &&& &&& &.getText().toString()));&& &&& &&& &&& &&& &httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));&& &&& &&& &&& &&& &&& &&& &&& &&& &&& &httpResponse = new DefaultHttpClient().execute(httpPost);&& &&& &&& &&& &&& &if (httpResponse.getStatusLine().getStatusCode() == 200)&& &&& &&& &&& &&& &{&& &&& &&& &&& &&& &&& &String result = EntityUtils.toString(httpResponse&& &&& &&& &&& &&& &&& &&& &&& &.getEntity());&& &&& &&& &&& &&& &&& &tvQueryResult.setText(result.replaceAll(&\r&, &&));&& &&& &&& &&& &&& &}&& &&& &&& &&& &&& &&& &&& &&& &}&& &&& &}&& &&& &catch (Exception e)&& &&& &{&& &&& &&& &tvQueryResult.setText(e.getMessage());&& &&& &}&& &}&& &@Override&& &public void onCreate(Bundle savedInstanceState)&& &{&& &&& &super.onCreate(savedInstanceState);&& &&& &setContentView(R.layout.main);&& &&& &Button btnGetQuery = (Button) findViewById(R.id.btnGetQuery);&& &&& &Button btnPostQuery = (Button) findViewById(R.id.btnPostQuery);&& &&& &btnGetQuery.setOnClickListener(this);&& &&& &btnPostQuery.setOnClickListener(this);&& &&& &&& &}}
上一页: &&&&&下一页:相关内容

我要回帖

更多关于 android h5开发框架 的文章

 

随机推荐