整合volley+greendao+gson,让android开发变得非常容易
来源:互联网 发布:重庆七腾软件 编辑:程序博客网 时间:2024/06/04 19:12
一、框架介绍
1、Volley
Google I/O 2013上发布的用于Android平台的网络通信库,能使网络通信更快、更简单、更健壮。实际使用下来,确实感受非常好,如官方所说。他提供了如下的便利功能:
JSON,图像等的异步下载;
网络请求的优先级处理
网络请求的排序
缓存
多级别取消请求
2、GreenDao
目前android经常用的orm框架主要有greenDAO、OrmLite、AndrORM。 综合了网上的各种评价,greenDAO的运行效率最高,内存消耗最少,性能最佳,支持一对多,多对多,且无需涉及sql语言。因此决定采用greenDAO框架,对项目的orm框架进行改进。
该框架也是出自Google,无需annotation就可以轻松将实体序列化,同时又可以通过annotation来灵活配置需要序列化的字段。
二、整合
通过Volley获取服务器数据,通过gson将json数据转换成实体,通过GreenDao直接将实体存入sqlite数据库,使用时可直接从sqlite取出实体类。整个流程无需接触通信,数据库操作,且全部为实体操作,完全为java的编程习惯。
插入时需要new一个新的对象,范例如下:
修改更新:
(2)删除某个对象
1、Volley
Google I/O 2013上发布的用于Android平台的网络通信库,能使网络通信更快、更简单、更健壮。实际使用下来,确实感受非常好,如官方所说。他提供了如下的便利功能:
JSON,图像等的异步下载;
网络请求的优先级处理
网络请求的排序
缓存
多级别取消请求
和Activity和生命周期的联动
下载:git clone https://android.googlesource.com/platform/frameworks/volley
2、GreenDao
目前android经常用的orm框架主要有greenDAO、OrmLite、AndrORM。 综合了网上的各种评价,greenDAO的运行效率最高,内存消耗最少,性能最佳,支持一对多,多对多,且无需涉及sql语言。因此决定采用greenDAO框架,对项目的orm框架进行改进。
下载:git clone https://github.com/greenrobot/greenDAO.git
该框架也是出自Google,无需annotation就可以轻松将实体序列化,同时又可以通过annotation来灵活配置需要序列化的字段。
二、整合
通过Volley获取服务器数据,通过gson将json数据转换成实体,通过GreenDao直接将实体存入sqlite数据库,使用时可直接从sqlite取出实体类。整个流程无需接触通信,数据库操作,且全部为实体操作,完全为java的编程习惯。
1、使用Volley、GreenDao从服务器获取数据转换成实体
一个简单request请求,该请求返回的是一个json对象
mQueue = Volley.newRequestQueue(getApplicationContext()); mQueue.add(new JsonObjectRequest(Method.GET, url, null, new Listener() { @Override public void onResponse(JSONObject response) { Log.d(TAG, "response : " + response.toString()); } }, null)); mQueue.start();现在我们需要修改让其直接返回实体对象,首先需要一个GsonRequest,来处理返回的数据,将其转换成我们所要的对象
import java.io.UnsupportedEncodingException;import java.util.Map;import com.android.volley.AuthFailureError;import com.android.volley.NetworkResponse;import com.android.volley.ParseError;import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.toolbox.HttpHeaderParser;import com.google.gson.Gson;import com.google.gson.JsonSyntaxException;public class GsonRequest<T> extends Request<T> {private final Gson gson = new Gson();private final Class<T> clazz;private final Map<String, String> headers;private final Listener<T> listener;/** * Make a GET request and return a parsed object from JSON. * * @param url * URL of the request to make * @param clazz * Relevant class object, for Gson's reflection * @param headers * Map of request headers */public GsonRequest(String url, Class<T> clazz, Map<String, String> headers,Listener<T> listener, ErrorListener errorListener) {super(Method.GET, url, errorListener);this.clazz = clazz;this.headers = headers;this.listener = listener;}@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {return headers != null ? headers : super.getHeaders();}@Overrideprotected void deliverResponse(T response) {listener.onResponse(response);}@Overrideprotected Response<T> parseNetworkResponse(NetworkResponse response) {try {String json = new String(response.data,HttpHeaderParser.parseCharset(response.headers));return Response.success(gson.fromJson(json, clazz),HttpHeaderParser.parseCacheHeaders(response));} catch (UnsupportedEncodingException e) {return Response.error(new ParseError(e));} catch (JsonSyntaxException e) {return Response.error(new ParseError(e));}}}继承了Request,在parseNetworkResponse方法中,我们将服务器返回的数据通过gson转换为我们指定的实体类,支持各种类型的转换,包括数组(勿使用,数据库无法存储)、List、Map、对象等,字段名必须跟返回的字段名一致,且区分大小写
现在我们有了Request,就可以直接使用了
mRequestQueue.add(new GsonRequest<User>(url, User.class, null, new Listener() { public void onResponse(User response) { //TO DO } } }现在我们直接得到实体类了,这时候可以直接使用,也可以保存到数据库
2、GreenDao的使用
GreenDao下载后有多个项目,DaoCore项目是需要导入的核心类库,DaoGenerator、DaoExampleGenerator为JAVA项目,用于生成项目使用的DAO及Bean,第一步我们使用它来生成DAO:
package de.greenrobot.daogenerator.gentest;import de.greenrobot.daogenerator.DaoGenerator;import de.greenrobot.daogenerator.Entity;import de.greenrobot.daogenerator.Property;import de.greenrobot.daogenerator.Schema;import de.greenrobot.daogenerator.ToMany;/** * Generates entities and DAOs for the example project DaoExample. * * Run it as a Java application (not Android). * * @author Markus */public class ExampleDaoGenerator{ public static void main(String[] args) throws Exception { Schema schema = new Schema(3, "de.greenrobot.daoexample"); addNote(schema); addCustomerOrder(schema); new DaoGenerator().generateAll(schema, "../DaoExample/src-gen"); } private static void addNote(Schema schema) { Entity note = schema.addEntity("Note"); note.addIdProperty(); note.addStringProperty("text").notNull(); note.addStringProperty("comment"); note.addDateProperty("date"); } private static void addCustomerOrder(Schema schema) { Entity customer = schema.addEntity("Customer"); customer.addIdProperty(); customer.addStringProperty("name").notNull(); Entity order = schema.addEntity("Order"); order.setTableName("ORDERS"); // "ORDER" is a reserved keyword order.addIdProperty(); Property orderDate = order.addDateProperty("date").getProperty(); Property customerId = order.addLongProperty("customerId").notNull().getProperty(); order.addToOne(customer, customerId); ToMany customerToOrders = customer.addToMany(order, customerId); customerToOrders.setName("orders"); customerToOrders.orderAsc(orderDate); } }生成代码很简单,网上也说的很多,自己看一下就可以完成,接下来我们就需要在代码中获取Dao,可以把他放在Application中
public static DaoMaster getDaoMaster(Context context) {if (daoMaster == null) {OpenHelper helper = new DaoMaster.DevOpenHelper(context, dir+ Constants.DB_NAME, null);daoMaster = new DaoMaster(helper.getWritableDatabase());}return daoMaster;}public static DaoSession getDaoSession(Context context) {if (daoSession == null) {if (daoMaster == null)daoMaster = getDaoMaster(context);daoSession = daoMaster.newSession();}return daoSession;}现在我们该有的都有了,就可以操作数据库了
1、查询
范例1:查询是否包含某个ID
<span style="color:#000000;">public boolean isSaved(int ID){ QueryBuilder<SaveList> qb = saveListDao.queryBuilder(); qb.where(Properties.Id.eq(ID)); qb.buildCount().count(); return qb.buildCount().count() > 0 ? true : false;}</span>范例2:获取整个表的数据集合,一句代码就搞定!
public List<PhotoGalleryDB> getPhotoGallery(){ return photoGalleryDao.loadAll();// 获取图片相册}范例3:通过一个字段值查找对应的另一个字段值(为简便直接使用下面方法,也许有更简单的方法,尚未尝试)
/** 通过图片id查找其目录id */public int getTypeId(int picId){ QueryBuilder<PhotoGalleryDB> qb = photoGalleryDao.queryBuilder(); qb.where(Properties.Id.eq(picId)); if (qb.list().size() > 0) { return qb.list().get(0).getTypeId(); } else { return -1; }}范例4:查找所有第一姓名是“Joe”并且以lastname排序。
List joes = userDao.queryBuilder().where(Properties.FirstName.eq("Joe")).orderAsc(Properties.LastName).list();
2.增添/插入、修改
public void addToPhotoTable(Photo p){ photoDao.insert(p);}
插入时需要new一个新的对象,范例如下:
DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null); db = helper.getWritableDatabase(); daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); noteDao = daoSession.getNoteDao(); Note note = new Note(null, noteText, comment, new Date()); noteDao.insert(note);
修改更新:
photoDao.insertOrReplace(photo);photoDao.insertInTx(photo);
3.删除:
(1)清空表格数据
/** 清空相册图片列表的数据 */public void clearPhoto(){ photoDao.deleteAll();}
(2)删除某个对象
public void deleteCityInfo(int cityId){ QueryBuilder<DBCityInfo> qb = cityInfoDao.queryBuilder(); DeleteQuery<DBCityInfo> bd = qb.where(Properties.CityId.eq(cityId)).buildDelete(); bd.executeDeleteWithoutDetachingEntities();}
由上可见,使用greenDAO进行数据库的增删改查时及其方便,而且性能极佳。
0 0
- 整合volley+greendao+gson,让android开发变得非常容易
- 整合volley+greendao+gson,让android开发变得非常容易
- 整合volley+greendao+gson,让android开发变得非常容易
- Kotlin入门(2)让App开发变得更容易
- Android开发 Volley通讯与Gson解析
- 【Android】GreenDao 3.X 结合Volley以及Gson、ImageLoader实现数据存储
- Xlight-让FTP搭建变得如此容易
- 如何让代码重审变得容易些?
- 使用Volley+OkHttp+Gson加速Android网络开发
- Android - 开发实例(10):让控件变得可拖拽
- 让 Android.Activity 变得透明
- 七条宝贵炒股经验 让赚钱变得如此容易
- 让C++变得更加容易:vector的增长机理
- 让C++变得更加容易:vector的增长机理
- jQuery Validation让验证变得如此容易(一)
- jQuery Validation让验证变得如此容易(二)
- jQuery Validation让验证变得如此容易(三)
- Android开发,Http请求整合框架(新)基于Volley
- Mysql的JDBC 的常见连接属性
- NULL值的处理和逻辑操作||分组函数(从实践中学习Oracle SQL 第五章 第六章)
- 【漂亮一百】一张漂亮面膜--面膜新态度 拯救肌肤三大危肌
- ARM 一些特殊符号
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第二步)(4)
- 整合volley+greendao+gson,让android开发变得非常容易
- good cplusplus site
- centos下svn服务器的搭建
- ubuntu12.04 安装及配置Jboss7
- 如何在ubuntu下编译dolphin-player所用的libffmpeg.so
- TIME_WAIT状态的快速恢复和重用
- 管理复杂性:好奇心和智商一样重要
- 多个地方非得更好地发挥地方反对感豆腐干
- JAVABean利用反射 转换为JSON对象