zoukankan      html  css  js  c++  java
  • 开源项目之Android Afinal框架

    项目如图:


    本文参考网络!

    Afinal是一个开源的Android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。在android应用开发中,通过Afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过Afinal的orm框架,无需任何配置信息,一行代码就可以对android的sqlite数据库进行增删改查操作。同时,Afinal内嵌了finalHttp等简单易用的工具,可以轻松的对http就行求情的操作。Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。


    Afinal框架的各个模块带来了的便捷

    1、FinalDB模块:android中的orm框架,一行代码就可以进行增删改查。支持一对多,多对一等查询。 
    2、FinalActivity模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。 
    3、FinalHttp模块:通过httpclient进行封装http数据请求,支持ajax方式加载。 
    4、FinalBitmap模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,在imageview显示图片的时候播放动画等(默认是渐变动画显示)。


    将Afinal框架带进你的工程的过程

    1.下载Afinal的jar包。推荐到GIT上下载(https://github.com/yangfuhai/afinal),这里不仅提供了Afinal 的jar包,还包括Afinal的源码以及详细API。 
    2.将下载后的jar包添加到Android工程里面。相信大家都会,不过也可能会遇到当添加了Afinal包后,继承FinalActivity的Activity会报java.lang.classNotFound这种错误,这种情况你最好将Afinal 包直接拷贝到Android工程的lib文件夹里面。这时你看Android的Dependencies包里面如果有了Afinal包就再次运行APK应该就不会有错了。 
    3.一个依赖Afinal包的工程还需要添加它所需要的权限:我们在AndroidManifest.xml文件里面添加如下权限:

    1. <uses-permission android:name="android.permission.INTERNET" />  
    1.  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  


    Afinal框架的各个模块的具体使用

    FinalDB使用方法:

    1. FinalDb db = FinalDb.create(this);  
    2.    
    3. User user = new User();  
    4.   
    5. user.setEmail("mail@tsz.net");  
    6.   
    7. user.setId(1);  
    8.   
    9. user.setName("michael yang");  
    10.   
    11.   
    12. db.save(user);  

    FinalActivity使用方法:

    1. public class AfinalDemoActivity extends FinalActivity {  
    2.      //无需调用findViewById和setOnclickListener等  
    3.     @ViewInject(id=R.id.button,click="btnClick") Button button;  
    4.     @ViewInject(id=R.id.textView) TextView textView;  
    5.           
    6.     public void onCreate(Bundle savedInstanceState) {  
    7.         super.onCreate(savedInstanceState);  
    8.         setContentView(R.layout.main);  
    9.     }  
    10.     public void btnClick(View v){  
    11.         textView.setText("text set form button");  
    12.     }  
    13. }  

    FinalHttp使用方法:

    1. FinalHttp fh = new FinalHttp();  
    2. fh.get("http://www.yangfuhai.com"new AjaxCallBack(){  
    3.     @Override  
    4.     public void onLoading(long count, long current) { //每1秒钟自动被回调一次  
    5.             textView.setText(current+"/"+count);  
    6.     }  
    7.     @Override  
    8.     public void onSuccess(String t) {  
    9.             textView.setText(t==null?"null":t);  
    10.     }  
    11.     @Override  
    12.     public void onStart() {  
    13.         //开始http请求的时候回调  
    14.     }  
    15.     @Override  
    16.     public void onFailure(Throwable t, String strMsg) {  
    17.         //加载失败的时候回调  
    18.     }  
    19. });  

    上传文件 或者提交数据:

    1. AjaxParams params = new AjaxParams();  
    2.  params.put("username""michael yang");  
    3.  params.put("password""123456");  
    4.  params.put("email""test@tsz.net");  
    5.  params.put("profile_picture"new File("/mnt/sdcard/pic.jpg")); // 上传文件  
    6.  params.put("profile_picture2", inputStream); // 上传数据流  
    7.  params.put("profile_picture3"new ByteArrayInputStream(bytes)); // 提交字节流  
    8.  FinalHttp fh = new FinalHttp();  
    9.  fh.post("http://www.yangfuhai.com", params, new AjaxCallBack(){  
    10.         @Override  
    11.         public void onLoading(long count, long current) {  
    12.                 textView.setText(current+"/"+count);  
    13.         }  
    14.         @Override  
    15.         public void onSuccess(String t) {  
    16.             textView.setText(t==null?"null":t);  
    17.         }  
    18.  });  

    使用FinalHttp下载文件:

    1. FinalHttp fh = new FinalHttp();    
    2. fh.download("http://www.xxx.com/下载路径/xxx.apk""/mnt/sdcard/testapk.apk"new AjaxCallBack() {    
    3.                 @Override    
    4.                 public void onLoading(long count, long current) {    
    5.                      textView.setText("下载进度:"+current+"/"+count);    
    6.                 }    
    7.     
    8.                 @Override    
    9.                 public void onSuccess(File t) {    
    10.                     textView.setText(t==null?"null":t.getAbsoluteFile().toString());    
    11.                 }    
    12.     
    13.             });    

    1.   
    FinalBitmap 使用方法 (加载网络图片就一行代码 fb.display(imageView,url)):

    1.  private GridView gridView;  
    2. private FinalBitmap fb;  
    3. @Override  
    4. protected void onCreate(Bundle savedInstanceState) {  
    5.     super.onCreate(savedInstanceState);  
    6.     setContentView(R.layout.images);  
    7.       
    8.     gridView = (GridView) findViewById(R.id.gridView);  
    9.     gridView.setAdapter(mAdapter);  
    10.       
    11.     fb = new FinalBitmap(this).init();//必须调用init初始化FinalBitmap模块  
    12.     fb.configLoadingImage(R.drawable.downloading);  
    13.     //这里可以进行其他十几项的配置,也可以不用配置,配置之后必须调用init()函数,才生效  
    14.     //fb.configBitmapLoadThreadSize(int size)  
    15.     //fb.configBitmapMaxHeight(bitmapHeight)  
    16. }  
    1. ///////////////////////////adapter getView////////////////////////////////////////////  
    2.   
    3. public View getView(int position, View convertView, ViewGroup parent) {  
    4.     ImageView iv;  
    5.     if(convertView == null){  
    6.         convertView = View.inflate(BitmapCacheActivity.this,R.layout.image_item, null);  
    7.         iv = (ImageView) convertView.findViewById(R.id.imageView);  
    8.         iv.setScaleType(ScaleType.CENTER_CROP);  
    9.         convertView.setTag(iv);  
    10.     }else{  
    11.         iv = (ImageView) convertView.getTag();  
    12.     }  
    13.     //bitmap加载就这一行代码,display还有其他重载,详情查看源码  
    14.     fb.display(iv,Images.imageUrls[position]);  
    15.     return convertView;  

  • 相关阅读:
    【Elasticsearch 技术分享】—— ES 常用名词及结构
    【Elasticsearch 技术分享】—— Elasticsearch ?倒排索引?这都是什么?
    除了读写锁,JUC 下面还有个 StampedLock!还不过来了解一下么?
    小伙伴想写个 IDEA 插件么?这些 API 了解一下!
    部署Microsoft.ReportViewe
    关于TFS强制undo他人check out
    几段查看数据库表占用硬盘空间的tsql
    How to perform validation on sumbit only
    TFS 2012 Disable Multiple Check-out
    在Chrome Console中加载jQuery
  • 原文地址:https://www.cnblogs.com/miaozhenzhong/p/5930898.html
Copyright © 2011-2022 走看看