首先介绍下afinal开发框架:
1、afinal是android中一个设计小巧的android应用开发框架
2、里面包含了一个orm框架,无需配置任何文件可以对android的sqlite进行增删改查操作。
3、里面包含了一个ioc框架,自动绑定android布局文件和代码的控件,同时支持对事件的绑定功能
4、里面包含了一个轻量级的http框架,对http请求只要一行代码就可以完成。
afinal源码地址 http://code.google.com/p/afinal/
这边文章主要介绍了afinal的ioc和orm功能:
我们要实现的功能很简单,我们可以添加数据到数据库sqlite,然后从数据库中查询所有的数据到listview上显示,可以再listview修改和删除数据。完成基本的增删改查功能。
废话少说,我们首先来建立一个mode类,很简单,就三个属性,代码如下:
- package com.yangfuhai.afinal;
- import net.tsz.afinal.annotation.sqlite.Id;
- public class User {
- @Id(column="myId")
- private int userId;
- private String name;
- private String email;
- //getter setter ...
- }
package com.yangfuhai.afinal;
import net.tsz.afinal.annotation.sqlite.Id;
public class User {
@Id(column="myId")
private int userId;
private String name;
private String email;
//getter setter ...
}
注意:当你的对象中有id 或者 _id 这个属性,可以不用配置@Id(column="myId");
接下来,我们看一下activity的代码:
- package com.yangfuhai.afinal;
- import java.util.ArrayList;
- import java.util.List;
- import net.tsz.afinal.FinaActivity;
- import net.tsz.afinal.FinalDb;
- import net.tsz.afinal.annotation.view.ViewInject;
- import android.os.Bundle;
- import android.text.TextUtils;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
- /**
- * @title 这是 afinal demo
- * @description 描述
- * @company 探索者网络工作室(www.tsz.net)
- * @author michael Young (www.YangFuhai.com)
- * @version 1.0
- * @created 2012-10-17
- */
- public class AfinalDemoActivity extends FinaActivity {
- @ViewInject(id=R.id.btn_add,click="btnClick") Button BtnAdd;
- @ViewInject(id=R.id.btn_refresh,click="btnClick") Button BtnRefresh;
- @ViewInject(id=R.id.listView,itemClick="itemClick") ListView listView;
- @ViewInject(id=R.id.edit_name) EditText edit_name;
- @ViewInject(id=R.id.edit_email) EditText edit_email;
- List<User> mListViewData = new ArrayList<User>();
- FinalDb db;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- db = FinalDb.creat(this);
- listView.setAdapter(mListAdapter);
- }
- public void btnClick(View v){
- if(v == BtnAdd){
- String name = edit_name.getText().toString();
- String email = edit_email.getText().toString();
- if(!TextUtils.isEmpty(name) && !TextUtils.isEmpty(email)){
- User user = new User();
- user.setEmail(email);
- user.setName(name);
- if(v.getTag()!=null){
- int id = Integer.valueOf(v.getTag().toString());
- user.setUserId(id);
- db.update(user);
- showToast("更新成功");
- }else{
- db.save(user);
- showToast("添加成功");
- }
- edit_name.setText("");
- edit_email.setText("");
- BtnAdd.setTag(null);
- BtnAdd.setText("添加数据");
- }
- }else if(v == BtnRefresh){
- mListViewData.clear();
- mListViewData.addAll(db.findAll(User.class));
- mListAdapter.notifyDataSetChanged();
- }
- }
- private View.OnClickListener itemButtonClick = new View.OnClickListener() {
- public void onClick(View v) {
- Object obj = v.getTag();
- if(obj instanceof Integer){
- int positon = Integer.valueOf(obj.toString());
- User user = mListViewData.get(positon);
- if(v.getId() == R.id.item_btn_del){ //listview的删除按钮
- // db.deleteById(User.class, user.getUserId());//也可以用这种方式删除
- db.deleteById(user);
- showToast("删除成功");
- BtnRefresh.performClick();//刷新列表
- }else if(v.getId() == R.id.item_btn_update){//listview的更新按钮
- edit_email.setText(user.getEmail());
- edit_name.setText(user.getName());
- BtnAdd.setText("更新数据");
- BtnAdd.setTag(user.getUserId());
- }
- }
- }
- };
- private void showToast(String strMsg){
- Toast.makeText(this, strMsg, 0).show();
- }
- private BaseAdapter mListAdapter = new BaseAdapter() {
- public View getView(int position, View convertView, ViewGroup parent) {
- View item = View.inflate(AfinalDemoActivity.this, R.layout.listitem, null);
- TextView tv_id = (TextView) item.findViewById(R.id.item_id);
- TextView tv_name = (TextView) item.findViewById(R.id.item_name);
- TextView tv_email = (TextView) item.findViewById(R.id.item_email);
- Button btn_del = (Button) item.findViewById(R.id.item_btn_del);
- Button btn_update = (Button) item.findViewById(R.id.item_btn_update);
- User user= mListViewData.get(position);
- tv_id.setText("id:"+user.getUserId()+"");
- tv_name.setText("名字:"+user.getName());
- tv_email.setText("邮箱:"+user.getEmail());
- btn_del.setTag(position);
- btn_update.setTag(position);
- btn_del.setOnClickListener(itemButtonClick);
- btn_update.setOnClickListener(itemButtonClick);
- return item;
- }
- public long getItemId(int position) {
- return position;
- }
- public Object getItem(int position) {
- return mListViewData.get(position);
- }
- public int getCount() {
- return mListViewData.size();
- }
- };
- }
package com.yangfuhai.afinal;
import java.util.ArrayList;
import java.util.List;
import net.tsz.afinal.FinaActivity;
import net.tsz.afinal.FinalDb;
import net.tsz.afinal.annotation.view.ViewInject;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
* @title 这是 afinal demo
* @description 描述
* @company 探索者网络工作室(www.tsz.net)
* @author michael Young (www.YangFuhai.com)
* @version 1.0
* @created 2012-10-17
*/
public class AfinalDemoActivity extends FinaActivity {
@ViewInject(id=R.id.btn_add,click="btnClick") Button BtnAdd;
@ViewInject(id=R.id.btn_refresh,click="btnClick") Button BtnRefresh;
@ViewInject(id=R.id.listView,itemClick="itemClick") ListView listView;
@ViewInject(id=R.id.edit_name) EditText edit_name;
@ViewInject(id=R.id.edit_email) EditText edit_email;
List<User> mListViewData = new ArrayList<User>();
FinalDb db;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db = FinalDb.creat(this);
listView.setAdapter(mListAdapter);
}
public void btnClick(View v){
if(v == BtnAdd){
String name = edit_name.getText().toString();
String email = edit_email.getText().toString();
if(!TextUtils.isEmpty(name) && !TextUtils.isEmpty(email)){
User user = new User();
user.setEmail(email);
user.setName(name);
if(v.getTag()!=null){
int id = Integer.valueOf(v.getTag().toString());
user.setUserId(id);
db.update(user);
showToast("更新成功");
}else{
db.save(user);
showToast("添加成功");
}
edit_name.setText("");
edit_email.setText("");
BtnAdd.setTag(null);
BtnAdd.setText("添加数据");
}
}else if(v == BtnRefresh){
mListViewData.clear();
mListViewData.addAll(db.findAll(User.class));
mListAdapter.notifyDataSetChanged();
}
}
private View.OnClickListener itemButtonClick = new View.OnClickListener() {
public void onClick(View v) {
Object obj = v.getTag();
if(obj instanceof Integer){
int positon = Integer.valueOf(obj.toString());
User user = mListViewData.get(positon);
if(v.getId() == R.id.item_btn_del){ //listview的删除按钮
// db.deleteById(User.class, user.getUserId());//也可以用这种方式删除
db.deleteById(user);
showToast("删除成功");
BtnRefresh.performClick();//刷新列表
}else if(v.getId() == R.id.item_btn_update){//listview的更新按钮
edit_email.setText(user.getEmail());
edit_name.setText(user.getName());
BtnAdd.setText("更新数据");
BtnAdd.setTag(user.getUserId());
}
}
}
};
private void showToast(String strMsg){
Toast.makeText(this, strMsg, 0).show();
}
private BaseAdapter mListAdapter = new BaseAdapter() {
public View getView(int position, View convertView, ViewGroup parent) {
View item = View.inflate(AfinalDemoActivity.this, R.layout.listitem, null);
TextView tv_id = (TextView) item.findViewById(R.id.item_id);
TextView tv_name = (TextView) item.findViewById(R.id.item_name);
TextView tv_email = (TextView) item.findViewById(R.id.item_email);
Button btn_del = (Button) item.findViewById(R.id.item_btn_del);
Button btn_update = (Button) item.findViewById(R.id.item_btn_update);
User user= mListViewData.get(position);
tv_id.setText("id:"+user.getUserId()+"");
tv_name.setText("名字:"+user.getName());
tv_email.setText("邮箱:"+user.getEmail());
btn_del.setTag(position);
btn_update.setTag(position);
btn_del.setOnClickListener(itemButtonClick);
btn_update.setOnClickListener(itemButtonClick);
return item;
}
public long getItemId(int position) {
return position;
}
public Object getItem(int position) {
return mListViewData.get(position);
}
public int getCount() {
return mListViewData.size();
}
};
}
在上面的列子中,我们不用findviewByid,也不需要对view进行setOnClickListener操作,完全注解配置。使得代码更加简洁。
在数据库操作中,我们只需要实例化FinalDb对象,通过FinalDB可以对user进行增加、删除、修改等操作。
有图有真相:
开发包下载:
http://download.csdn.net/detail/qq331710168/5175452
转载请注明出处。