1.afinal 框架下载地址:框架下载地址链接,
不过该框架有些地方需要修改源码才能满足需求,所以我一般都直接把源码打进项目,方便修改。
2.添加框架的时候需要增加权限,修改AndroidManifest.xml添加以下权限代码(访问网络和SD卡):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3.UI、事件绑定
所有Activity继承FinalActivity,如下面绑定,直接就省略了在Activity写findViewById方法获取UI,而且也省略了绑定事件,这里只需要绑定方法名就行
@ViewInject(id = R.id.btn_refresh, click = "btnRefresh",longClick="",itemClick="",itemLongClick="")
private Button BtnRefresh;
public void btnRefresh(View v) {
if (v == getBtnRefresh()) {
reloadData();
}
}
4.FinalDB
初始化FinalDB,Common.getDBPath()是指数据库所在的文件路径,Common.DB_NAME是我自己指定的一个常量,数据库的名称。
FinalDB db = FinalDb.create(this, Common.getDBPath(), Common.DB_NAME);
FinalDB这个类封装了数据库操作的方法,学过hibernate的朋友可以很快上手,每个数据表对应一个Java实体类,通过注解绑定关系,例如这个类:
package com.lyy.exhibition.entity;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import net.tsz.afinal.annotation.sqlite.Id;
import net.tsz.afinal.annotation.sqlite.OneToMany;
import net.tsz.afinal.annotation.sqlite.Property;
import net.tsz.afinal.annotation.sqlite.Table;
@Table(name = "visit_archive")
public class VisitArchive {
@Id(column = "id")
private int archiveId;
@Property(column = "archive_name")
private String archiveName;
@Property(column = "archive_desc")
private String archiveDesc;
@Property(column = "visit_time")
private Date visitTime;
@OneToMany(manyColumn = "archive_id")
private List<VisitPhoto> visitPhotos = new ArrayList<VisitPhoto>();
public int getArchiveId() {
return archiveId;
}
public void setArchiveId(int archiveId) {
this.archiveId = archiveId;
}
public String getArchiveName() {
return archiveName;
}
public void setArchiveName(String archiveName) {
this.archiveName = archiveName;
}
public String getArchiveDesc() {
return archiveDesc;
}
public void setArchiveDesc(String archiveDesc) {
this.archiveDesc = archiveDesc;
}
public Date getVisitTime() {
return visitTime;
}
public void setVisitTime(Date visitTime) {
this.visitTime = visitTime;
}
public List<VisitPhoto> getVisitPhotos() {
return visitPhotos;
}
public void setVisitPhotos(List<VisitPhoto> visitPhotos) {
this.visitPhotos = visitPhotos;
}
}
如果不指定table_name和table_property的话,程序会按照你的字段名称去生成,不过还是自己指定比较好,顺便说一下,afinal不支持多主键,这点比较无语。
FinalDB中提供很多封装好的数据库操作,所以很方便,例如下面保存:
VisitArchive archive = new VisitArchive();
archive.setArchiveName(archiveName);
archive.setArchiveDesc(archiveDesc);
if (archiveId > 0) {
// 更新
archive.setArchiveId(archiveId);
db.update(archive);
}else{
// 新增
archive.setVisitTime(new Date(System.currentTimeMillis()));
db.save(archive);
}
5.FinalBitmap
初始化FinalBitmap
FinalBitmap finalBitmap = FinalBitmap.create(this.getApplicationContext());
加载网络图片或者本地图片就一行代码
finalBitmap.display(imageView,url);