Giter Club home page Giter Club logo

yangfuhai / afinal Goto Github PK

View Code? Open in Web Editor NEW
3.2K 3.2K 1.5K 4.13 MB

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

Java 100.00%

afinal's People

Contributors

fantouch avatar haoyuexing avatar iamrain2008 avatar kvgnt avatar lsjwzh avatar yangfuhai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

afinal's Issues

关于磁盘缓存的问题

简单用了一下这个框架,挺不错的,但是在使用finalBitmap的时候遇到一个问题,不知道是不是bug.
我只是使用了FinalBitmap.display方法,url地址指向一个网上的图片。每次我关闭activity之后,图片都会再次从web上读取,而不是从sdcard的cache中读取。我看了一下cache目录,那个文件应该是存在的,但是没有被读取,而且从web上再次读取图片的时候会将原来的缓存图片删除。
挺看好这个框架,感觉简单好用,谢谢。

dropDb报错

源代码
Cursor cursor = db.rawQuery("SELECT name FROM sqlite_master WHERE type ='table' ", null);
修改成
Cursor cursor = db.rawQuery("SELECT name FROM sqlite_master WHERE type ='table' and name !='sqlite_sequence' ", null);

关闭网络状态下,FinalHttp在执行Get请求的时候报了Runtime异常

打印了一下异常。是个崩溃bug
java.lang.RuntimeException: An error occured while executing doInBackground()
at net.tsz.afinal.common.AsyncTask$3.done(AsyncTask.java:160)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Caused by: java.lang.NullPointerException
at net.tsz.afinal.http.RetryHandler.retryRequest(RetryHandler.java:79)
at net.tsz.afinal.http.AjaxRequestHandler.makeRequestWithRetries(AjaxRequestHandler.java:83)
at net.tsz.afinal.http.AjaxRequestHandler.doInBackground(AjaxRequestHandler.java:106)
at net.tsz.afinal.common.AsyncTask$2.call(AsyncTask.java:148)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
... 4 more
java.lang.NullPointerException
at net.tsz.afinal.http.RetryHandler.retryRequest(RetryHandler.java:79)
at net.tsz.afinal.http.AjaxRequestHandler.makeRequestWithRetries(AjaxRequestHandler.java:83)
at net.tsz.afinal.http.AjaxRequestHandler.doInBackground(AjaxRequestHandler.java:106)
at net.tsz.afinal.common.AsyncTask$2.call(AsyncTask.java:148)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)

FinalDB不能读取最新的db文件

应用在运行的过程中,下载一个db文件,覆盖原来的文件,FinalDB读取的还是原来db中的内容,但是直接通过SQLiteDatabase去读取,是能读取到最新的内容的。
FinalDB不用关闭或释放资源吗?

无法加载本地图片

SimpleDownloader类中的getFromFile,使用了FileReader,没进行关闭,造成decode为bitmap的时候结果为空。
1、关闭流
2、使用字节读取
即可修复。

private byte[] getFromFile(String urlString) {
FileInputStream f = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
f = new FileInputStream(new File(urlString));
int b;
while ((b = f.read()) != -1) {
baos.write(b);
}
byte[] bb= baos.toByteArray();
return bb;
} catch (Exception e) {
e.printStackTrace();
}finally{
if(f!=null){
try {
f.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

    return null;
}

FinalDB不用Close么?

自己通过SQLiteOpenHelper或者Context或者SQLiteDatabase之后,基本都需要明显调用close
在FinalDB中没看到相关的源码,难道不需要么?

希望添加maven支持

现在项目结构有点乱,而且缺乏对应的测试文件,希望能够使用maven或者类似物

回调函数的处理有问题

如果网速比较慢,在一个activity里面发起了http请求。在请求过程中用户跳转到其他的activity,这时候如果触发onSuccess之类的回调函数,程序就会出错误。因为被操作的对象已经不存在了。

FinalHTTP下载功能

支持了断点续传以后,不知道是因为下载地址的原因还是什么,反复使用handler.stop然后又重新启动下载后,容易出现无法启动下载或者下载成功后是一个错误的文件。
而且回调接口的onFailure的返回信息都是String类型,判断起来非常不方便

[question] 请问一下,代码里重写AsyncTask的目的是什么?

你的注释写的是“修改了线程池属性,让并发线程按顺序执行”,我和Android源码对比了下,发现改动的地方以下几处:

1、
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
}

-->

public Thread newThread(Runnable r) {
Thread tread = new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
tread.setPriority(Thread.NORM_PRIORITY - 1);
return tread;
}

2、
public static final Executor SERIAL_EXECUTOR = Utils.hasHoneycomb() ? new SerialExecutor() :
Executors.newSingleThreadExecutor(sThreadFactory);

-->

public static final Executor SERIAL_EXECUTOR = new SerialExecutor();

3、
public static final Executor DUAL_THREAD_EXECUTOR =
Executors.newFixedThreadPool(2, sThreadFactory);

-->

public static final Executor DUAL_THREAD_EXECUTOR =Executors.newFixedThreadPool(3, sThreadFactory);

我觉得你的改动主要是(2),我想问的是你这么改的目的是什么,为什么必须让他顺序执行,不顺序执行的话,会有什么问题啊?

修改findAllBySql 并重载

/**
 * 根据条件查找所有数据
 * @param clazz
 * @param strSQL
 */
public <T> List<T> findAllBySql(Class<T> clazz,String strSQL){
    return findAllBySql(clazz, true, strSQL);
}

/**
 * 根据条件查找所有数据
 * @param clazz
 * @param isCheckTable 为false时 ,该类不调用checkTableExist()方法,不会在数据库中自动 建表
 * @param strSQL
 */
public <T> List<T> findAllBySql(Class<T> clazz,Boolean isCheckTable,String strSQL){
    if(isCheckTable==true){checkTableExist(clazz);}
    debugSql(strSQL);
    Cursor cursor = db.rawQuery(strSQL, null);
    try {
        List<T> list = new ArrayList<T>();
        while(cursor.moveToNext()){
            T t = CursorUtils.getEntity(cursor, clazz,this);
            list.add(t);
        }
        return list;
    } catch (Exception e) {
        e.printStackTrace();
    }finally{
        if(cursor!=null)
            cursor.close();
        cursor=null;
    }
    return null;
}

1.将findAllBySql private属性更改为public属性。这样就支持我们手写一些复杂的SQL了。
2.修改原有findAllBySql 方法,并增加了一个重载方法。

原来方法调用,会自动在数据库中建立 UserView的表,其实我们UserView只是前台视图,是不需要建表的。
List userList = db.findAllBySql(UserView.class,"select * from user_test a,user_child b where a.id = b.parentId");

调用时:
List userList = db.findAllBySql(UserView.class,false,"select * from user_test a,user_child b where a.id = b.parentId");
第二个参数为false时,系统就不执行checkTableExist 方法,就不会自动建立UserView这个表了。

FinalDB在正式打包后不能正常初始化

在模拟器上跑没有问题,用电脑连接手机安装进去也没有问题,但签名打包后,发到手机里面,发现数据库初始化出错,已经确定是数据库问题了,请问如何解决?

部分机型初始化图片缓存时出现内存溢出

异常信息:
java.lang.OutOfMemoryError
java.util.HashMap.makeTable(HashMap.java:555)
java.util.HashMap.(HashMap.java:158)
net.tsz.afinal.bitmap.core.SoftMemoryCacheImpl.(SoftMemoryCacheImpl.java:28)
net.tsz.afinal.bitmap.core.BitmapCache.init(BitmapCache.java:64)
net.tsz.afinal.bitmap.core.BitmapCache.(BitmapCache.java:49)
net.tsz.afinal.FinalBitmap.init(FinalBitmap.java:239)
net.tsz.afinal.FinalBitmap.doDisplay(FinalBitmap.java:327)
net.tsz.afinal.FinalBitmap.display(FinalBitmap.java:264)

SoftMemoryCacheImpl 设置大小时,默认值过大导致

AsynTask有个bug

android.os.AsynTask有个bug,具体看底部文件,这个是因为android SDK 低于11是不支持支持设置并发的,所以当指向executeOnExecutor方法的时候会有爆方法不存在的错误,建议继承自定义的AsynTask而不是系统的,我开了个gist,这个类在这里: https://gist.github.com/inmyfree/5334766

附送 stackflow 问题讨论和解决方案:
http://stackoverflow.com/questions/7211684/asynctask-executeonexecutor-before-api-level-11

错误日记:

QQ20130408-2 2x

HttpTools中文乱码

使用版本为0.3.1时。
获取一个GB2312格式的页面源码出现乱码。

问题应该是net.tsz.afinal.http.entityhandler.StringEntityHandler类中的handleEntity()方法。
最后return的是UTF-8,所以有问题。

获取本地缓存出现OOM

UYL0HBMC ER_D_ CNXCX47

我的配置是这样的:
fb = FinalBitmap.create(this, "/mmworld/cache", (float) 0.5, 10, 5);
为什么会出现这个情况呢

几个问题请教

  • 这个库和aquery的大多数功能重叠, 除了orm, 作者觉得特色在什么地方
  • 有没有和诸如ormlite一类的orm的性能对比?

代码混淆

如果我想打混淆包,需要在progurd里面添加什么

0.5版本上ViewInject @click注释失效问题

将jar替换成0.5版本之后,发现click方法无法被调用,打印如下日志:
java.lang.IllegalArgumentException: object is not an instance of the class
at java.lang.reflect.Field.getField(Native Method)
at java.lang.reflect.Field.get(Field.java:237)
at net.tsz.afinal.FinalActivity.setViewClickListener(FinalActivity.java:129)
at net.tsz.afinal.FinalActivity.initInjectedView(FinalActivity.java:103)
at net.tsz.afinal.FinalActivity.initInjectedView(FinalActivity.java:70)
at net.tsz.afinal.FinalActivity.setContentView(FinalActivity.java:39)
查看源码发现0.5版本与0.3版本FinalActivity的initInjectedView(Object injectedSource,View sourceView)方法中存在差异:
0.3版本:
String clickMethod = viewInject.click();
if(!TextUtils.isEmpty(clickMethod))
setViewClickListener(injectedSource,field,clickMethod);
0.5版本:
String clickMethod = viewInject.click();
if(!TextUtils.isEmpty(clickMethod))
setViewClickListener(sourceView,field,clickMethod);

关于closeCache 内存没有下降的问题

调用 closeCache 后内存没有下降是什么问题 ?

目前我们的环境是 .一个全局单例对象 . 包含两个FinalBitmap对象 . 在用户选择注销并清理缓存数据的时候 分别调用

closeCache()

clearCache()

并将全局单例对象设置成null

重新登陆内存会增加5M , 注 销登陆重复这个过程每次会增加5M 左右

mFinalBitmap.configRecycleImmediately(true)后在单activity中载入大量listview复用图片,出现lrucache中的bug,设置mFinalBitmap.configRecycleImmediately(false)后表现良好

08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): Caused by: java.lang.IllegalStateException: net.tsz.afinal.bitmap.core.SoftMemoryCacheImpl$1.sizeOf() is reporting inconsistent results!
08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): at net.tsz.afinal.bitmap.core.LruMemoryCache.trimToSize(LruMemoryCache.java:140)
08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): at net.tsz.afinal.bitmap.core.LruMemoryCache.put(LruMemoryCache.java:126)
08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): at net.tsz.afinal.bitmap.core.SoftMemoryCacheImpl.put(SoftMemoryCacheImpl.java:42)
08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): at net.tsz.afinal.bitmap.core.BitmapCache.addToMemoryCache(BitmapCache.java:90)
08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): at net.tsz.afinal.FinalBitmap$BitmapLoadAndDisplayTask.doInBackground(FinalBitmap.java:719)
08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): at net.tsz.afinal.FinalBitmap$BitmapLoadAndDisplayTask.doInBackground(FinalBitmap.java:1)
08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): at net.tsz.afinal.core.AsyncTask$2.call(AsyncTask.java:145)
08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-19 14:21:32.561: E/AndroidRuntime_4_crash(20721): ... 4 more

关于请求异常问题

getSync, postSync这个两个方法都没有抛出异常,我在项目里使用的时候就是请求不到数据,也不抛出异常,很是郁闷啊,为什么不抛出异常信息呢?

各种问题,不太会用。

强烈要求上完整的sample,就试了下orm报了一大堆的错误。
不得不看源码逐步排查问题,总体来说赞一个。留个联系方式或者与我取得联系。 fangqing.fan#hotmail.com

afinal_0.5_bin.jar,onClick函数无法调用

1.使用afinal_0.5_bin.jar包时,btnClick函数不调用,求解?
public class MainUI extends FinalActivity {
@ViewInject(id=R.id.btnGotoUI,click="btnClick")Button btn;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_ui);
}
public void btnClick(View v) {
Log.e("MSG", "btnClick is called...");
}
}
ps:但使用afinal-0.3.32-bin.jar时,一切正常。

关于不支持父类属性的问题

我在创建类的时候,将公共属性提到一个单独的类中,所有类都继承该公共类.结果出现问题,发现你在反射获取属性的时候发现使用的是 getDeclaredFields()

如果要实现可以继承父类的话该如何做?
我想把所有用到 getDeclaredFields() 的地方都抽成一个方法,如下
ClassUtils.getFields(Class<?> clazz){return clazz.getDeclaredFields();}

然后,针对我的问题,我能不能 override 这个方法,改成 return clazz.getFields();
这样就支持父类了.

java 新手,不知这样可行与否?

升级数据库版本时出现 sql 异常

SqliteDbHelper.onUpgrade() 的默认操作:
db.execSQL("DROP TABLE "+cursor.getString(0));

会出现 table sqlite_sequence may not be dropped 的异常.

修正:
try {
db.execSQL("DROP TABLE "+cursor.getString(0));
} catch (SQLException e) {
android.util.Log.d("Debug SQL", ">>>>>> "+e.getMessage());
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.