diff --git a/README.md b/README.md index 612167f..c36dbe5 100644 --- a/README.md +++ b/README.md @@ -1,289 +1,2 @@ -#afinal交流平台 -* QQ群:192341294(群1,2000未满) 246710918(群2,1000未满) -* 网址:[http://www.afinal.org](http://www.afinal.org) - - ----- -# ![mahua](http://code.google.com/p/afinal/logo?cct=1351516535) Afinal简介 -* Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用; -* 使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。 -* Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。 - - -##目前Afinal主要有四大模块: - -* FinalDB模块:android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。 - -* FinalActivity模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。 - -* FinalHttp模块:通过httpclient进行封装http数据请求,支持ajax方式加载。 - -* FinalBitmap模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,在imageview显示图片的时候播放动画等(默认是渐变动画显示)。 - - ---- -## 使用afinal快速开发框架需要有以下权限: - -```xml - - -``` -* 第一个是访问网络 -* 第二个是访问sdcard -* 访问网络是请求网络图片的时候需要或者是http数据请求时候需要,访问sdcard是图片缓存的需要。 - ----- -##FinalDB使用方法: -关于finalDb的更多介绍,请点击[这里](http://my.oschina.net/yangfuhai/blog/87459) - -```java -FinalDb db = FinalDb.create(this); -User user = new User(); //这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性 -user.setEmail("mail@tsz.net"); -user.setName("michael yang"); -db.save(user); -``` - ----- -##FinalDB OneToMany懒加载使用方法: -模型定义: -```java -public class Parent{ - private int id; - @OneToMany(manyColumn = "parentId") - private OneToManyLazyLoader children; - /*....*/ -} -public class Child{ - private int id; - private String text; - @ManyToOne(column = "parentId") - private Parent parent; - /*....*/ -} -``` -使用: -```java -List all = db.findAll(Parent.class); - for( Parent item : all){ - if(item.getChildren ().getList().size()>0) - Toast.makeText(this,item.getText() + item.getChildren().getList().get(0).getText(),Toast.LENGTH_LONG).show(); - } -``` ----- -##FinalActivity使用方法: -* 完全注解方式就可以进行UI绑定和事件绑定 -* 无需findViewById和setClickListener等 - -```java -public class AfinalDemoActivity extends FinalActivity { - - //无需调用findViewById和setOnclickListener等 - @ViewInject(id=R.id.button,click="btnClick") Button button; - @ViewInject(id=R.id.textView) TextView textView; - - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.main); - } - - public void btnClick(View v){ - textView.setText("text set form button"); - } -} -``` -*在其他侵入式框架下使用(如ActionBarShelock) -```java - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(view); - FinalActivity.initInjectedView(this); - } -``` -*在Fragment中使用 -```java - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View viewRoot = inflater.inflate(R.layout.map_frame, container, false); - FinalActivity.initInjectedView(this,viewRoot); - } -``` -##FinalHttp使用方法: -###普通get方法 - -```java -FinalHttp fh = new FinalHttp(); -fh.get("http://www.yangfuhai.com", new AjaxCallBack(){ - - @Override - public void onLoading(long count, long current) { //每1秒钟自动被回调一次 - textView.setText(current+"/"+count); - } - - @Override - public void onSuccess(String t) { - textView.setText(t==null?"null":t); - } - - @Override - public void onStart() { - //开始http请求的时候回调 - } - - @Override - public void onFailure(Throwable t, String strMsg) { - //加载失败的时候回调 - } -}); -``` - -### 使用FinalHttp上传文件 或者 提交数据 到服务器(post方法) -文件上传到服务器,服务器如何接收,请查看[这里](http://www.oschina.net/question/105836_85825) - -```java - AjaxParams params = new AjaxParams(); - params.put("username", "michael yang"); - params.put("password", "123456"); - params.put("email", "test@tsz.net"); - params.put("profile_picture", new File("/mnt/sdcard/pic.jpg")); // 上传文件 - params.put("profile_picture2", inputStream); // 上传数据流 - params.put("profile_picture3", new ByteArrayInputStream(bytes)); // 提交字节流 - - FinalHttp fh = new FinalHttp(); - fh.post("http://www.yangfuhai.com", params, new AjaxCallBack(){ - @Override - public void onLoading(long count, long current) { - textView.setText(current+"/"+count); - } - - @Override - public void onSuccess(String t) { - textView.setText(t==null?"null":t); - } - }); -``` - - ----- - -###使用FinalHttp下载文件: -* 支持断点续传,随时停止下载任务 或者 开始任务 - -```java - FinalHttp fh = new FinalHttp(); - //调用download方法开始下载 - HttpHandler handler = fh.download("http://www.xxx.com/下载路径/xxx.apk", //这里是下载的路径 - true,//true:断点续传 false:不断点续传(全新下载) - "/mnt/sdcard/testapk.apk", //这是保存到本地的路径 - new AjaxCallBack() { - @Override - public void onLoading(long count, long current) { - textView.setText("下载进度:"+current+"/"+count); - } - - @Override - public void onSuccess(File t) { - textView.setText(t==null?"null":t.getAbsoluteFile().toString()); - } - - }); - - - //调用stop()方法停止下载 - handler.stop(); - - -``` - - -##FinalBitmap 使用方法 -加载网络图片就一行代码 fb.display(imageView,url) ,更多的display重载请看[帮助文档](https://github.com/yangfuhai/afinal/tree/master/doc) - -```java -private GridView gridView; - private FinalBitmap fb; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.images); - - gridView = (GridView) findViewById(R.id.gridView); - gridView.setAdapter(mAdapter); - - fb = FinalBitmap.create(this);//初始化FinalBitmap模块 - fb.configLoadingImage(R.drawable.downloading); - //这里可以进行其他十几项的配置,也可以不用配置,配置之后必须调用init()函数,才生效 - //fb.configBitmapLoadThreadSize(int size) - //fb.configBitmapMaxHeight(bitmapHeight) - } - - -///////////////////////////adapter getView//////////////////////////////////////////// - -public View getView(int position, View convertView, ViewGroup parent) { - ImageView iv; - if(convertView == null){ - convertView = View.inflate(BitmapCacheActivity.this,R.layout.image_item, null); - iv = (ImageView) convertView.findViewById(R.id.imageView); - iv.setScaleType(ScaleType.CENTER_CROP); - convertView.setTag(iv); - }else{ - iv = (ImageView) convertView.getTag(); - } - //bitmap加载就这一行代码,display还有其他重载,详情查看源码 - fb.display(iv,Images.imageUrls[position]); -``` - - ---- -**>>> Add by fantouch** - -#### 配置成Android Library Project -*解决需求:有多个项目依赖afinal,并且想修改afinal源码* -> -* clone到本地 -* 添加AndroidManifest.xml文件: -```xml - - - - -``` -> -* 导入到 Eclipse: -`Import => Android => Existing Android Code Into Workspace` -* 工程上按右键 => Properties => Android => √ Is Library -* 完成,你的项目可以引用这个afinal Library了. - -#### 排除不需要Git管理的文件 -*解决需求:想修改源码,但不想让Eclipse把工程弄脏* -> -* 忽略已经被Git管理的`./bin`目录: -导入Eclipse前执行: ` git update-index --assume-unchanged ./bin/* ` -> -* 忽略未被Git管理的文件和目录: 添加`/.gitignore` 文件: -``` -/gen -/assets -/bin -/res -/.classpath -/.project -/AndroidManifest.xml -/project.properties -/.gitignore -``` -* 导入到Eclipse,`git status`可见Repository依旧干净. - -**<<< Add by fantouch** - ---- - -#关于作者michael -* 个人博客:[http://www.yangfuhai.com](http://www.yangfuhai.com) -* afinal捐助:[http://me.alipay.com/yangfuhai](http://me.alipay.com/yangfuhai) (为了感谢捐助者,michael将会把捐助者将公布在afinal官方网站[afinal.org](http://www.afinal.org)上,不让公布的同学说明下) -* afinal交流QQ群 : 192341294 - +克隆自 https://github.com/yangfuhai/afinal +针对需求做了些自定义的改动 diff --git a/src/net/tsz/afinal/FinalBitmap.java b/src/net/tsz/afinal/FinalBitmap.java index b718da9..3433b7f 100644 --- a/src/net/tsz/afinal/FinalBitmap.java +++ b/src/net/tsz/afinal/FinalBitmap.java @@ -341,11 +341,11 @@ private void doDisplay(View imageView, String uri, BitmapDisplayConfig displayCo } if (bitmap != null) { - if(imageView instanceof ImageView){ - ((ImageView)imageView).setImageBitmap(bitmap); - }else{ - imageView.setBackgroundDrawable(new BitmapDrawable(bitmap)); + Displayer displayer = displayConfig.getDisplayer(); + if(null == displayer){ + displayer=mConfig.displayer; } + displayer.loadCompletedisplay(imageView, bitmap, displayConfig); }else if (checkImageTask(uri, imageView)) { @@ -707,10 +707,16 @@ protected void onPostExecute(Bitmap bitmap) { // 判断线程和当前的imageview是否是匹配 final View imageView = getAttachedImageView(); - if (bitmap != null && imageView != null) { - mConfig.displayer.loadCompletedisplay(imageView,bitmap,displayConfig); - }else if(bitmap == null && imageView!=null ){ - mConfig.displayer.loadFailDisplay(imageView, displayConfig.getLoadfailBitmap()); + if (null != imageView) { + Displayer displayer = displayConfig.getDisplayer(); + if (null == displayer) { + displayer = mConfig.displayer; + } + if (bitmap != null) { + displayer.loadCompletedisplay(imageView, bitmap, displayConfig); + } else { + displayer.loadFailDisplay(imageView, displayConfig.getLoadfailBitmap()); + } } } diff --git a/src/net/tsz/afinal/FinalDb.java b/src/net/tsz/afinal/FinalDb.java index 52b700e..2875592 100644 --- a/src/net/tsz/afinal/FinalDb.java +++ b/src/net/tsz/afinal/FinalDb.java @@ -17,7 +17,6 @@ import java.io.File; import java.io.IOException; -import java.lang.String; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -37,7 +36,6 @@ import android.content.ContentValues; import android.content.Context; import android.database.Cursor; -import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; @@ -56,14 +54,10 @@ private FinalDb(DaoConfig config) { throw new DbException("daoConfig is null"); if (config.getContext() == null) throw new DbException("android context is null"); - if (config.getTargetDirectory() != null - && config.getTargetDirectory().trim().length() > 0) { - this.db = createDbFileOnSDCard(config.getTargetDirectory(), - config.getDbName()); + if (config.getTargetDirectory() != null && config.getTargetDirectory().trim().length() > 0) { + this.db = createDbFileOnSDCard(config.getTargetDirectory(), config.getDbName()); } else { - this.db = new SqliteDbHelper(config.getContext() - .getApplicationContext(), config.getDbName(), - config.getDbVersion(), config.getDbUpdateListener()) + this.db = new SqliteDbHelper(config.getContext().getApplicationContext(), config.getDbName(), config.getDbVersion(), config.getDbUpdateListener()) .getWritableDatabase(); } this.config = config; @@ -142,8 +136,7 @@ public static FinalDb create(Context context, String dbName, boolean isDebug) { * @param dbName * 数据库名称 */ - public static FinalDb create(Context context, String targetDirectory, - String dbName) { + public static FinalDb create(Context context, String targetDirectory, String dbName) { DaoConfig config = new DaoConfig(); config.setContext(context); config.setDbName(dbName); @@ -160,8 +153,7 @@ public static FinalDb create(Context context, String targetDirectory, * @param isDebug * 是否为debug模式(debug模式进行数据库操作的时候将会打印sql语句) */ - public static FinalDb create(Context context, String targetDirectory, - String dbName, boolean isDebug) { + public static FinalDb create(Context context, String targetDirectory, String dbName, boolean isDebug) { DaoConfig config = new DaoConfig(); config.setContext(context); config.setTargetDirectory(targetDirectory); @@ -185,8 +177,7 @@ public static FinalDb create(Context context, String targetDirectory, * 数据库升级监听器:如果监听器为null,升级的时候将会清空所所有的数据 * @return */ - public static FinalDb create(Context context, String dbName, - boolean isDebug, int dbVersion, DbUpdateListener dbUpdateListener) { + public static FinalDb create(Context context, String dbName, boolean isDebug, int dbVersion, DbUpdateListener dbUpdateListener) { DaoConfig config = new DaoConfig(); config.setContext(context); config.setDbName(dbName); @@ -212,9 +203,7 @@ public static FinalDb create(Context context, String dbName, * :如果监听器为null,升级的时候将会清空所所有的数据 * @return */ - public static FinalDb create(Context context, String targetDirectory, - String dbName, boolean isDebug, int dbVersion, - DbUpdateListener dbUpdateListener) { + public static FinalDb create(Context context, String targetDirectory, String dbName, boolean isDebug, int dbVersion, DbUpdateListener dbUpdateListener) { DaoConfig config = new DaoConfig(); config.setContext(context); config.setTargetDirectory(targetDirectory); @@ -256,8 +245,7 @@ public void save(Object entity) { */ public boolean saveBindId(Object entity) { checkTableExist(entity.getClass()); - List entityKvList = SqlBuilder - .getSaveKeyValueListByEntity(entity); + List entityKvList = SqlBuilder.getSaveKeyValueListByEntity(entity); if (entityKvList != null && entityKvList.size() > 0) { TableInfo tf = TableInfo.get(entity.getClass()); ContentValues cv = new ContentValues(); @@ -283,8 +271,7 @@ private void insertContentValues(List list, ContentValues cv) { cv.put(kv.getKey(), kv.getValue().toString()); } } else { - Log.w(TAG, - "insertContentValues: List is empty or ContentValues is empty!"); + Log.w(TAG, "insertContentValues: List is empty or ContentValues is empty!"); } } @@ -349,6 +336,10 @@ public void deleteByWhere(Class clazz, String strWhere) { db.execSQL(sql); } + public void execSQL(String sql) { + db.execSQL(sql); + } + /** * 删除表的所有数据 * @@ -377,9 +368,10 @@ public void dropTable(Class clazz) { /** * 删除所有数据表 */ - public void dropDb() { - Cursor cursor = db.rawQuery( - "SELECT name FROM sqlite_master WHERE type ='table' AND name != 'sqlite_sequence'", null); + public void dropDb(String where) { + if (null == where) + where = "SELECT name FROM sqlite_master WHERE type ='table' AND name != 'sqlite_sequence'"; + Cursor cursor = db.rawQuery(where, null); if (cursor != null) { while (cursor.moveToNext()) { db.execSQL("DROP TABLE " + cursor.getString(0)); @@ -411,8 +403,7 @@ public T findById(Object id, Class clazz) { SqlInfo sqlInfo = SqlBuilder.getSelectSqlAsSqlInfo(clazz, id); if (sqlInfo != null) { debugSql(sqlInfo.getSql()); - Cursor cursor = db.rawQuery(sqlInfo.getSql(), - sqlInfo.getBindArgsAsStringArray()); + Cursor cursor = db.rawQuery(sqlInfo.getSql(), sqlInfo.getBindArgsAsStringArray()); try { if (cursor.moveToNext()) { return CursorUtils.getEntity(cursor, clazz, this); @@ -426,6 +417,23 @@ public T findById(Object id, Class clazz) { return null; } + public int getCount(Class clazz, String strWhere) { + String sql = SqlBuilder.getCount(clazz, strWhere); + Cursor cur = db.rawQuery(sql, null); + int num = 0; + try { + if (cur.moveToFirst() != false) { + int nameColumnIndex = cur.getColumnIndex("number"); + num = cur.getInt(nameColumnIndex); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + cur.close(); + } + return num; + } + /** * 根据主键查找,同时查找“多对一”的数据(如果有多个“多对一”属性,则查找所有的“多对一”属性) * @@ -453,8 +461,7 @@ public T findWithManyToOneById(Object id, Class clazz) { * @param findClass * 要查找的类 */ - public T findWithManyToOneById(Object id, Class clazz, - Class... findClass) { + public T findWithManyToOneById(Object id, Class clazz, Class... findClass) { checkTableExist(clazz); String sql = SqlBuilder.getSelectSQL(clazz, id); debugSql(sql); @@ -474,21 +481,17 @@ public T findWithManyToOneById(Object id, Class clazz, * @param * @return */ - public T loadManyToOne(DbModel dbModel, T entity, Class clazz, - Class... findClass) { + public T loadManyToOne(DbModel dbModel, T entity, Class clazz, Class... findClass) { if (entity != null) { try { - Collection manys = TableInfo.get(clazz).manyToOneMap - .values(); + Collection manys = TableInfo.get(clazz).manyToOneMap.values(); for (ManyToOne many : manys) { Object id = null; if (dbModel != null) { id = dbModel.get(many.getColumn()); - } else if (many.getValue(entity).getClass() == ManyToOneLazyLoader.class - && many.getValue(entity) != null) { - id = ((ManyToOneLazyLoader) many.getValue(entity)) - .getFieldValue(); + } else if (many.getValue(entity).getClass() == ManyToOneLazyLoader.class && many.getValue(entity) != null) { + id = ((ManyToOneLazyLoader) many.getValue(entity)).getFieldValue(); } if (id != null) { @@ -505,21 +508,13 @@ public T loadManyToOne(DbModel dbModel, T entity, Class clazz, if (isFind) { @SuppressWarnings("unchecked") - T manyEntity = (T) findById( - Integer.valueOf(id.toString()), - many.getManyClass()); + T manyEntity = (T) findById(Integer.valueOf(id.toString()), many.getManyClass()); if (manyEntity != null) { if (many.getValue(entity).getClass() == ManyToOneLazyLoader.class) { if (many.getValue(entity) == null) { - many.setValue( - entity, - new ManyToOneLazyLoader(entity, - clazz, - many.getManyClass(), - this)); + many.setValue(entity, new ManyToOneLazyLoader(entity, clazz, many.getManyClass(), this)); } - ((ManyToOneLazyLoader) many - .getValue(entity)).set(manyEntity); + ((ManyToOneLazyLoader) many.getValue(entity)).set(manyEntity); } else { many.setValue(entity, manyEntity); } @@ -561,8 +556,7 @@ public T findWithOneToManyById(Object id, Class clazz) { * @param clazz * @param findClass */ - public T findWithOneToManyById(Object id, Class clazz, - Class... findClass) { + public T findWithOneToManyById(Object id, Class clazz, Class... findClass) { checkTableExist(clazz); String sql = SqlBuilder.getSelectSQL(clazz, id); debugSql(sql); @@ -586,8 +580,7 @@ public T findWithOneToManyById(Object id, Class clazz, public T loadOneToMany(T entity, Class clazz, Class... findClass) { if (entity != null) { try { - Collection ones = TableInfo.get(clazz).oneToManyMap - .values(); + Collection ones = TableInfo.get(clazz).oneToManyMap.values(); Object id = TableInfo.get(clazz).getId().getValue(entity); for (OneToMany one : ones) { boolean isFind = false; @@ -602,13 +595,11 @@ public T loadOneToMany(T entity, Class clazz, Class... findClass) { } if (isFind) { - List list = findAllByWhere(one.getOneClass(), - one.getColumn() + "=" + id); + List list = findAllByWhere(one.getOneClass(), one.getColumn() + "=" + id); if (list != null) { /* 如果是OneToManyLazyLoader泛型,则执行灌入懒加载数据 */ if (one.getDataType() == OneToManyLazyLoader.class) { - OneToManyLazyLoader oneToManyLazyLoader = one - .getValue(entity); + OneToManyLazyLoader oneToManyLazyLoader = one.getValue(entity); oneToManyLazyLoader.setList(list); } else { one.setValue(entity, list); @@ -642,8 +633,7 @@ public List findAll(Class clazz) { */ public List findAll(Class clazz, String orderBy) { checkTableExist(clazz); - return findAllBySql(clazz, SqlBuilder.getSelectSQL(clazz) - + " ORDER BY " + orderBy); + return findAllBySql(clazz, SqlBuilder.getSelectSQL(clazz) + " ORDER BY " + orderBy); } /** @@ -655,8 +645,7 @@ public List findAll(Class clazz, String orderBy) { */ public List findAllByWhere(Class clazz, String strWhere) { checkTableExist(clazz); - return findAllBySql(clazz, - SqlBuilder.getSelectSQLByWhere(clazz, strWhere)); + return findAllBySql(clazz, SqlBuilder.getSelectSQLByWhere(clazz, strWhere)); } /** @@ -668,12 +657,9 @@ public List findAllByWhere(Class clazz, String strWhere) { * @param orderBy * 排序字段 */ - public List findAllByWhere(Class clazz, String strWhere, - String orderBy) { + public List findAllByWhere(Class clazz, String strWhere, String orderBy) { checkTableExist(clazz); - return findAllBySql(clazz, - SqlBuilder.getSelectSQLByWhere(clazz, strWhere) + " ORDER BY " - + orderBy); + return findAllBySql(clazz, SqlBuilder.getSelectSQLByWhere(clazz, strWhere) + " ORDER BY " + orderBy); } /** @@ -753,8 +739,7 @@ private boolean tableIsExist(TableInfo table) { Cursor cursor = null; try { - String sql = "SELECT COUNT(*) AS c FROM sqlite_master WHERE type ='table' AND name ='" - + table.getTableName() + "' "; + String sql = "SELECT COUNT(*) AS c FROM sqlite_master WHERE type ='table' AND name ='" + table.getTableName() + "' "; debugSql(sql); cursor = db.rawQuery(sql, null); if (cursor != null && cursor.moveToNext()) { @@ -854,8 +839,7 @@ public void setTargetDirectory(String targetDirectory) { * @param dbfilename * @return */ - private SQLiteDatabase createDbFileOnSDCard(String sdcardPath, - String dbfilename) { + private SQLiteDatabase createDbFileOnSDCard(String sdcardPath, String dbfilename) { File dbf = new File(sdcardPath, dbfilename); if (!dbf.exists()) { try { @@ -876,22 +860,21 @@ class SqliteDbHelper extends SQLiteOpenHelper { private DbUpdateListener mDbUpdateListener; - public SqliteDbHelper(Context context, String name, int version, - DbUpdateListener dbUpdateListener) { + public SqliteDbHelper(Context context, String name, int version, DbUpdateListener dbUpdateListener) { super(context, name, null, version); this.mDbUpdateListener = dbUpdateListener; } @Override - public void onCreate(SQLiteDatabase db) { + public void onCreate(SQLiteDatabase db) { } @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (mDbUpdateListener != null) { mDbUpdateListener.onUpgrade(db, oldVersion, newVersion); } else { // 清空所有的数据信息 - dropDb(); + dropDb(null); } } diff --git a/src/net/tsz/afinal/bitmap/core/BitmapDisplayConfig.java b/src/net/tsz/afinal/bitmap/core/BitmapDisplayConfig.java index a27ce5c..73147ae 100644 --- a/src/net/tsz/afinal/bitmap/core/BitmapDisplayConfig.java +++ b/src/net/tsz/afinal/bitmap/core/BitmapDisplayConfig.java @@ -15,6 +15,7 @@ */ package net.tsz.afinal.bitmap.core; +import net.tsz.afinal.bitmap.display.Displayer; import android.graphics.Bitmap; import android.view.animation.Animation; @@ -30,7 +31,16 @@ public class BitmapDisplayConfig { private Bitmap loadingBitmap; private Bitmap loadfailBitmap; + private Displayer displayer; + public Displayer getDisplayer() { + return displayer; + } + + public BitmapDisplayConfig setDisplayer(Displayer displayer) { + this.displayer = displayer; + return this; + } public int getBitmapWidth() { return bitmapWidth; } diff --git a/src/net/tsz/afinal/db/sqlite/SqlBuilder.java b/src/net/tsz/afinal/db/sqlite/SqlBuilder.java index 1aeac3e..0a4e7ba 100644 --- a/src/net/tsz/afinal/db/sqlite/SqlBuilder.java +++ b/src/net/tsz/afinal/db/sqlite/SqlBuilder.java @@ -19,14 +19,13 @@ import java.util.Collection; import java.util.List; -import android.text.TextUtils; - import net.tsz.afinal.db.table.Id; import net.tsz.afinal.db.table.KeyValue; import net.tsz.afinal.db.table.ManyToOne; import net.tsz.afinal.db.table.Property; import net.tsz.afinal.db.table.TableInfo; import net.tsz.afinal.exception.DbException; +import android.text.TextUtils; public class SqlBuilder { @@ -180,7 +179,12 @@ public static String getSelectSQL(Class clazz,Object idValue){ return strSQL.toString(); } - + public static String getCount(Class clazz,String strWhere){ + TableInfo table=TableInfo.get(clazz); + StringBuffer strSQL = new StringBuffer("select count(id) AS number from ").append(table.getTableName()); + strSQL.append(" WHERE ").append(strWhere); + return strSQL.toString(); + } public static SqlInfo getSelectSqlAsSqlInfo(Class clazz,Object idValue){ TableInfo table=TableInfo.get(clazz);