android网络请求框架(Android框架)

admin 498 0

今天给各位分享android网络请求框架的知识,其中也会对Android框架进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

一、android底层网络框架是怎么实现的

1、一个好用的网络底层框架可以很大的程度上方便自己的项目,我们下面要做的就是一个趁手的网络框架。

2、做一个网络框架我们首先要确定这个网络框架除了能够从网络上获取数据还需要哪些功能:

3、首先抛弃AsyncTask,自定义一套网络底层的封装框架。

4、设计一套假数据返回的机制,在网络请求API没有返回的时候,可以假装获取到了网络返回的数据。

5、其他的还好,可能有人对于第一步的那个抛弃AsyncTask有些疑问,就是为什么要抛弃啊,这个类这个好用,内部封装了那么多的方法。但是我们不能只看到这个的优点,这个类有个致命的缺点:不能灵活的控制内部的线程池。

6、我们都知道的是,线程池里面的每个线程都是API的调用请求,而AsyncTask中有没有暴漏出取消这些请求的方法,这个时候,如果我们从A界面调到B界面,那么在A界面调用的API请求,如果还没有返回,并不会被取消,对于一个频繁调用API请求的APP应用应用来说,一个界面调用的API可能超过十个,在网络不好的情况下,如果这个时候跳转到了其他界面,这个时候其他界面也会调用API,这个时候造成的情况就是这个界面的请求并不会显示数据,因为首页的请求还在排队,要等首页的请求完成之后你才可以调用,这个就是所谓的AsyncTask堵塞。

7、我刚工作的时候遇到一个情况就是,根据公司的情况写了一个统计用户交互数据的SDK,开始的使用时候就是这个AsyncTask类,结构我发现在APP中某一个界面的吊起特别的慢,数据加载也非常的慢,发现的原因是我写的这个SDK中的API请求调用超时,并且在超时的时候重复调用三次这个API。

8、网络请求两个方法POST和GET,我们一般把GET方法为请求数据,POST为修改数据。请求的方法格式也是相对有讲究的。

9、所有的MobileApi都可以写作:http://www.xxx.com/aaaa.api的形式。

10、GET:对于GET方法我们可以将请求API写作http://www.xxx.com/aaaa.api K1=va1&K2=va2,形式,也就是说,把key-value这样的键值对存放在URL上,这样做的话会方便我们后面对数据进行缓存,另外要精良是GET的参数都是String,int这样的类型,方便缓存,解析。

11、POST:我们都知道看不见POST的请求数据,一般key-value这样的键值对存放在Form表单中,最后进行提交请求。POST经常会提交大量数据,所以有些键值对要定义成集合或复杂的自定义实例,这个时候我们就需要把这样的值转换为JSON字符串进行提交,有APP传递到API后,在将JSON字符串转换为对于的实体。

12、服务器现在用的最多的是使用JSON作为api返回的结果,这里也是使用JSON。

13、一般情况下返回的json数据中要有以下数据:

14、首先一个是否调用api成功的参数,

15、另外一个错误类型的参数(这个参数可以是Int格式的参数,成功为0)

16、错误具体信息的参数,成功为“”

17、所以我们定义一个Response实体类,作为JSON实体的最外层。

18、如果成功返回了数据,数据会存放在result字符按中,映射为Response实体的result属性。

19、如果上面返回的result是一种实体的集合,那么就要把result解析为相应的实体集合。

20、我们在前面看到我们把AsyncTask抛弃重新写一个扩展性强的,可以随时取消API请求网络底层,那么我们的这个网络底层的线程池使用的是什么:使用原生的ThreadPoolExecutor+ Runnable+ Handler

21、首先我们要把App所调用的所有的API接口放到一个类或者xml文件中去,我们这里放在xml文件里面去,当然要写出读取xml的类和函数:

22、其中key和url的值符合key-value键值,expires代表数据缓存的时间单位为毫秒,netType代表请求方式(POST和GET),mockClass代表的是返回假数据的类。

23、RemoteService和RequestCallback和RequestParameter

24、这三个类表示的是请求的服务,请求返回,请求参数,三个给APP调用的类。

25、RequestParameter:请求携带的参数

26、forceUpdate:是否强制更新数据,忽略缓存

27、RequestMannager类是一个集合类,用于取消请求的。每次发起请求时,都会把为此创建的Request添加到RequestManager中,即RequestManager中保存了全部的request。

28、他是对ThreadPoolExecutor和ArrayBlockingQueue的简单封装,是一个线程池,每发起一次请求,这个线程池就会分配一个新的线程来执行该请求。

29、HttpRequest类,发起HTTP请求的地方,他事先了Runable,从而让DefaultThreadPool可以分配新的线程,所以所有的请求逻辑都在Runnable接口方法里:

30、在这个类中对于get请求接口,他会把传递来的数据,处理为相应的格式:http://www.xxx.com/aaaa.api K1=va1&K2=va2。对于Post格式的请求接口,他会把传递过来的数据转换为BasicNameValuePair的形式,并放在表单中提交。

31、需要注意的是,因为我们把每个HttpRequest都放在了子线程中执行,所以RequestCallback的回调不能直接操作UI线程的控件,所以这个时候Handler就可以用到了。使用这个就可以保证RequestCallback的回调在UI线程上,不会报错。

二、android开发框架有哪些

安卓的OpenGL ES 2.0/3.0引擎。可以用于制作普通应用或者动态壁纸,当然也可以用于制作游戏。

项目地址: https://github.com/Rajawali/Rajawali

RxAndroid是RxJava的一个针对Android平台的扩展。它包含了一些能够简化Android开发的工具。

项目地址: https://github.com/ReactiveX/RxAndroid

Paginize是一个轻量级的UI框架,使用注解来注入布局和view,除了使用注解之外,该框架还有两个特色:1.用Page的概念来取代Fragment,2.切换page时自带ios风格的动画效果。

项目地址: https://github.com/neevek/Paginize

Otto是square公司出的一个事件库(pub/sub模式),用来简化应用程序组件之间的通讯。 Otto修改自Google的Guava库,专门为Android平台进行了优化。

项目地址: https://github.com/square/otto

rebound是facebook的开源动画库。可以认为这个动画库是独立于android Framework之外的一种动画实现。

项目地址: https://github.com/facebook/rebound

KJFrameForAndroid又叫KJLibrary,是一个帮助快速开发的框架。使用KJFrameForAndroid,你可以只用一行代码就完成http请求、网络图片加载、数据库数据保存或读取。

项目地址: https://github.com/kymjs/KJFrameForAndroid

包含了很多实用的android工具。 xUtils

支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls

最低兼容android 2.2(api level 8)

项目地址: https://github.com/wyouflf/xUtils

android中的orm框架,一行代码就可以进行增删改查;

可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);

支持绑定外键,保存实体时外键关联实体自动保存或更新;

自动加载外键关联实体,支持延时加载;

支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。

android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;

新的事件绑定方式,使用混淆工具混淆后仍可正常工作;

目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。

支持大文件上传,上传大文件不会oom;

支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;

下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;

返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。

加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;

内存管理使用lru算法,更好的管理bitmap内存;

可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...

为了减少频繁的调用findViewById(R.id...),可以采用一些注入框架,可以简化自己的代码,让你更专注于实际的功能开发,butterknife就是这样的一个框架,他是jakewharton大神的作品,值得一试。

class ExampleActivity extends Activity{

@InjectView(R.id.title) TextView title;

@InjectView(R.id.subtitle) TextView subtitle;

@InjectView(R.id.footer) TextView footer;

@Override public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.simple_activity);

// TODO Use"injected" views...

http://jakewharton.github.io/butterknife/

项目地址: https://github.com/JakeWharton/butterknife

cube一个Android开发包,可极大提高你的开发效率。主要提供了图片加载以及网络请求方面的api功能。

项目地址: https://github.com/etao-open-source/cube-sdk

他们的网站:http://cube-sdk.liaohuqiu.net/cn/

是一个为android制定的轻量级的开源缓存框架。轻量到只有一个java文件(由十几个类精简而来)。

它可以缓存什么东西?普通的字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java对象,和

项目地址: https://github.com/yangfuhai/ASimpleCache

AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。

使代码更加精简,使项目更加容易维护,它的目标就是“Fast Android Development.Easy maintainance”。

通过一段时间的使用发现,相比原生的Android开发,确实能够让你少些很多代码

项目地址: https://github.com/excilys/androidannotations

当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越困难。如何优雅地解决这个问题?这时候,就需要使用到EventBus。

EventBus是GreenRobot出品的Android系统的一个Event

Bus类库,使用起来和之前我们所介绍的Square的Otto差不多,都是用来简化应用组件之间的通信。

项目地址: https://github.com/greenrobot/EventBus

Android版主要为Android初级开发人员提供一个基于MVC开发模式的APP DEMO,并提供一套APP内调试工具,包括

查看网络数据请求历史 Crash Log列表真机WIFI环境下模拟2G\3G网络查看APP性能(内存占用,CPU占用等)

项目地址: https://github.com/BeeFramework/BeeFramework_Android

Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。

Afinal里面目前包含了四大组件:

FinalHttp:用于请求http数据,直接ajax方式请求,文件上传,断点续传下载文件等

FinalBitmap:用于显示bitmap图片,而无需考虑线程并发和oom等问题。

FinalActivity:完全可以通过注解方式绑定控件和事件,无需编写代码。

FinalDb:android中sqlite的orm框架,一行代码搞定增删改查。

Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。详情请通过以下网址查看。

项目地址: https://github.com/yangfuhai/afinal

在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google

I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。

项目地址: https://github.com/mcxiaoke/android-volley

三、android app开发中常用到哪些开源框架

在前面的课程中,随着对Android体系的了解,已经可以进行正常的Android应用开发了。在Android开发中,同其他工程开发一样,也经常使用一些提高效率的框架,本文我们做一个对比。这些框架,既包括:网络请求框架、也包括图片加载库框架、还包括数据库操作等一些框架,总之,了解和熟悉这些框架,会对自己的开发效率有很大的提升和帮助。

在前文的学习中,我们已经了解过okHttp,是一个常用的网络加载库。

Retrofit是一个很不错的网络请求库,该库是square开源的另外一个库,之前的okhttp也是该公司开源的。

Retrofit是基于OkHttp封装的RESTful网络请求框架,使用注解的方式配置请求。优点是速度快,使用注解,callback函数返回结果自动包装成Java对象。官方自己的介绍说:

A type-safe REST client for Android and Java

该网络框架在github上的地址如下:https://square.github.io/retrofit/

Retrofit支持的http方式方式包括 GET/POST/PUT/DELETE/HEAD/PATCH,Retrofit要求Java的版本是1.8+,Android应用的API版本应该在21+。

使用Retrofit库,和其他库一样,首先需要设置依赖,依然是在build.gradle文件中设置依赖:

implementation‘com.squareup.retrofit2:retrofit:2.1.0’

implementation‘com.squareup.retrofit2:converter-gson:2.1.0’

通过一个例子,我们可以来演示该框架的使用步骤:

1、定义请求接口,即程序中都需要什么请求操作

public interface HttpServices{

Call getNewsList(@Query(“type”) String type,@Query(“key”) String key);

2、实例化Retrofit对象,使用的Builder的模式创建,如下代码所示:

Retrofit retrofit= new Retrofit.Builder()

.addConverterFactory(GsonConverterFactory.create())

注意,这里设置结构体转换器,是可以直接把网络请求回来的数据转换为Java结构体,这里设置的Gson解析器,因此要引入相应的转换器支持库。

3、得到接口对象,自己创建的全局的接口对象,并调用相应的接口,得到一个类似于请求Call对象。如下所示:

HttpServices httpServices= retrofit.create(HttpServices.class);

Call newsListCall= httpServices.getNewsList(“top”, Constants.API_KEY);

4、加入到请求队列中,并设置回调方法:

newsListCall.enqueue(new Callback(){

public void onResponse(Call call, Response response){

List list= Arrays.asList(response.body().result.data);

Log.i(“TAG”,“请求成功:”+ String.valueOf(list.size()));

NewListAdapter adapter= new NewListAdapter(RetrofitActivity.this);

mRecyclerView.setAdapter(adapter);

public void onFailure(Call call, Throwable throwable){

Log.i(“TAG”,“请求失败:”+ throwable.getMessage());

其他界面操作和之前的Android中的内容一致。

简单来说,用来处理事件和异步任务,在很多语言上都有实现,RxJava是Rx在Java上的实现。

RxJava最基本的原理是基于观察者模式来实现的。通过Obserable和Observer的机制,实现所谓响应式的编程体验。

RxJava在编程中的实现就是一种链式调用,做了哪些操作,谁在前谁在后非常直观,逻辑清晰,代码维护起来非常轻松。

RxJava也是一个在github上的库,githubhttp://www.xingkongmj.com/news/id/62.html地址如下:https://github.com/ReactiveX/RxJava

基于此,还有一个RxAndroid,github地址如下:https://github.com/ReactiveX/RxAndroid

RxAndroid是RxJava的一个针对Android平台的扩展,主要用于 Android开发。

Observable:可观察者,即被观察者Observer:观察者subscribe:订阅事件

这四个概念之间的逻辑关系是:Observable和Observer通过subscribe方法实现订阅关系,从而Observable可以在需要的时候发出事件来通知Observer。

RxJava的事件回调方法主要包含以下几个:

onNext:普通的事件onCompletedhttp://daduchang.net/432717.html:事件队列完结。RxJava不仅把每个事件单独处理,还会把它们看做一个队列。RxJava规定,当不会再有新的 onNext发出时,需要触发 onCompleted方法作为标志。:事件队列异常。在事件处理过程中出异常时,会被触发,同时队列自动终止,不再允许再有事件发出。在一个正确运行的事件序列中, onCompleted和有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted()和()二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。

在开发时,本地数据库可以起到缓存数据和存储业务数据的作用,随着技术的成熟,不断推出了有很多关于数据库的操作框架。比较常见的数据库操作框架有诸如:GreenDao,OrmLite和 ActiveAndroid,DBFlow等。

GreenDAO是一个开源的 Android ORM(“对象/关系映射”),通过 ORM(称为“对象/关系映射”),在我们数据库开发过程中节省了开发时间!

GreenDao的官方文档地址如下:http://www.xingkongmj.com/news/id/63.html

通过 GreenDao,我们可以更快速的操作数据库,我们可以使用简单的面相对象的API来存储,更新,删除和查询 Java对象。这款数据库操作框架的特点是:

高性能,在官方的统计数据中,GreenDao在GreenDao,OrmLite和 ActiveAndroid三个框架中,读、写、更新操作效率均表现第一。易于使用的强大 API,涵盖关系和连接。内存消耗较小。安全:greenDAO支持 SQLCipherhttp://www.xingkongmj.com/news/id/64.html,以确保用户的数据安全;

GreenDao的核心类有三个:分别是:

DaoMaster:保存数据库对象(SQLiteDatabase)并管理特定模式的 DAO类(而不是对象)。它有静态方法来创建表或删除它们。它的内部类 OpenHelper和DevOpenHelper是 SQLiteOpenHelper实现,它们在 SQLite数据库中创建模式。DaoSession:管理特定模式的所有可用 DAO对象,您可以使用其中一个getter方法获取该对象。DaoSession还提供了一些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。XXXDao:数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比 DaoSession更多的持久性方法。Entities:可持久化对象。通常,实体对象代表一个数据库行使用标准 Java属性(如一个POJO或 JavaBean)。

按照官方的文档和github上的说明可以实现greendao的使用。

首先进行的是依赖,对于greenDao,有两个地方需要设置,分别是项目根目录中的 build.gradle,还有module中的build.gradle。

classpath‘org.greenrobot:greendao-gradle-plugin:3.3.0’// add plugin

在项目根目录中的build.gradle目录中写这句话的意思是添加greenDao的插件。

在项目module中的build.gradle中也需要进行配置,有两个地方需要设置,如下图所示:

apply plugin:‘org.greenrobot.greendaohttp://www.xingkongmj.com/news/id/66.html’//开头加入该代码

implementation‘org.greenrobot:greendao:3.2.0’

可以在项目中创建自己业务需要的实体类,并通过注解来设置是实体类,字段约束等内容。然后点击Android Studio中的Make module,即可自动生成XXXDao代码,以此来方便开发者的操作。生成的XXXDao类,不可修改和编辑,是自动生成的。

ORMLite框架是另外一款Android开发中可以使用的数据库操作框架。该框架的文档地址如下:https://ormlite.com/sqlite_java_android_orm.shtml

该框架的文档准备的不是特别友好,此处不再赘述。

总结,所有的框架原理几乎都相差不大,只是操作有所差异。

在Android项目开发过程中,有太多的页面需要布局完成,同时在代码中需要些大量的findviewbyid的操作,来实现控件的解析。于是就有人想能否轻松一些,解放双手节省时间,干一些其他有意义的事情,于是ButterKnife就来了。

ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成。

该项目在github上的地址如下:http://www.xingkongmj.com/news/id/65.html

强大的View绑定和Click事件处理功能,简化代码,提升开发效率方便的处理Adapter里的ViewHolder绑定问题运行时不会影响APP效率,使用配置方便代码清晰,可读性强

首先是设置依赖,在build.gradlehttp://daduchang.net/432714.html中进行依赖设置:

implementation‘com.jakewharton:butterknife:10.2.1’

annotationProcessor‘com.jakewharton:butterknife-compiler:10.2.1’

需要注意,该框架要求Java环境1.8版本以上,SDK版本在26以上,因此在使用到的module中的build.graldle文件中,还必须添加如下代码配置:

apply plugin:‘com.jakewharton.butterknife’

sourceCompatibility JavaVersion.VERSION_1_8

targetCompatibility JavaVersion.VERSION_1_8

另外,还必须在项目根目录中的build.gradle文件中,添加该框架的插件,如下图所示:

classpath‘com.jakewharton:butterknife-gradle-plugin:10.2.1’

在使用该框架的页面进行绑定诸如,如下所示代码:

@BindView():控件id注解,解放双手,不用再每个控件都写一遍findviewById@BindViews():多个控件id的注解,括号内使用花括号包括多个id即可,中间用,分割开在Fragment中使用,绑定Fragment。@BindString():绑定字符串@BindArray:绑定数组@BindBitmap:绑定bitmap资源@OnClick、@OnLongClick:绑定点击事件和长按事件…还有很多

如果是页面很复杂,一个一个写BindView也很费劲,在Android Studio中,可以安装一个ButterKnife的插件,安装该插件后,可以在Studio中直接将对应的布局中的所有控件均给自动生成。

注意,在进行自动生成时,鼠标要放在布局文件上。

ButterKnife框架在使用时,要求的版本比较高,包括Java的版本也有限制。因此,如果计划在项目中使用,要提前做好预备工作,以防止对已有项目和业务带来不必要的麻烦,反而影响工作进度。

关于android网络请求框架,Android框架的介绍到此结束,希望对大家有所帮助。