android+final+框架,使用android快速开发框架afinal 开发android应用程序
首先介紹下afinal開(kāi)發(fā)框架:
1、afinal是android中一個(gè)設(shè)計(jì)小巧的android應(yīng)用開(kāi)發(fā)框架
2、里面包含了一個(gè)orm框架,無(wú)需配置任何文件可以對(duì)android的sqlite進(jìn)行增刪改查操作。
3、里面包含了一個(gè)ioc框架,自動(dòng)綁定android布局文件和代碼的控件,同時(shí)支持對(duì)事件的綁定功能
4、里面包含了一個(gè)輕量級(jí)的http框架,對(duì)http請(qǐng)求只要一行代碼就可以完成。
afinal源碼地址?http://code.google.com/p/afinal/
這邊文章主要介紹了afinal的ioc和orm功能:
我們要實(shí)現(xiàn)的功能很簡(jiǎn)單,我們可以添加數(shù)據(jù)到數(shù)據(jù)庫(kù)sqlite,然后從數(shù)據(jù)庫(kù)中查詢所有的數(shù)據(jù)到listview上顯示,可以再listview修改和刪除數(shù)據(jù)。完成基本的增刪改查功能。
廢話少說(shuō),我們首先來(lái)建立一個(gè)mode類,很簡(jiǎn)單,就三個(gè)屬性,代碼如下:
packagecom.yangfuhai.afinal;
importnet.tsz.afinal.annotation.sqlite.Id;
publicclassUser?{
@Id(column="myId")
privateintuserId;
privateString?name;
privateString?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 ...
}
注意:當(dāng)你的對(duì)象中有id 或者 _id 這個(gè)屬性,可以不用配置@Id(column="myId");
接下來(lái),我們看一下activity的代碼:
packagecom.yangfuhai.afinal;
importjava.util.ArrayList;
importjava.util.List;
importnet.tsz.afinal.FinaActivity;
importnet.tsz.afinal.FinalDb;
importnet.tsz.afinal.annotation.view.ViewInject;
importandroid.os.Bundle;
importandroid.text.TextUtils;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.ListView;
importandroid.widget.TextView;
importandroid.widget.Toast;
/**
*?@title?這是?afinal?demo
*?@description?描述
*?@company?探索者網(wǎng)絡(luò)工作室(www.tsz.net)
*?@author?michael?Young?(www.YangFuhai.com)
*?@version?1.0
*?@created?2012-10-17
*/
publicclassAfinalDemoActivityextendsFinaActivity?{
@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?mListViewData?=newArrayList();
FinalDb?db;
publicvoidonCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db?=?FinalDb.creat(this);
listView.setAdapter(mListAdapter);
}
publicvoidbtnClick(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?=newUser();
user.setEmail(email);
user.setName(name);
if(v.getTag()!=null){
intid?=?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("添加數(shù)據(jù)");
}
}elseif(v?==?BtnRefresh){
mListViewData.clear();
mListViewData.addAll(db.findAll(User.class));
mListAdapter.notifyDataSetChanged();
}
}
privateView.OnClickListener?itemButtonClick?=newView.OnClickListener()?{
publicvoidonClick(View?v)?{
Object?obj?=?v.getTag();
if(objinstanceofInteger){
intpositon?=?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();//刷新列表
}elseif(v.getId()?==?R.id.item_btn_update){//listview的更新按鈕
edit_email.setText(user.getEmail());
edit_name.setText(user.getName());
BtnAdd.setText("更新數(shù)據(jù)");
BtnAdd.setTag(user.getUserId());
}
}
}
};
privatevoidshowToast(String?strMsg){
Toast.makeText(this,?strMsg,0).show();
}
privateBaseAdapter?mListAdapter?=newBaseAdapter()?{
publicView?getView(intposition,?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);
returnitem;
}
publiclonggetItemId(intposition)?{
returnposition;
}
publicObject?getItem(intposition)?{
returnmListViewData.get(position);
}
publicintgetCount()?{
returnmListViewData.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 探索者網(wǎng)絡(luò)工作室(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 mListViewData = new ArrayList();
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("添加數(shù)據(jù)");
}
}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("更新數(shù)據(jù)");
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,也不需要對(duì)view進(jìn)行setOnClickListener操作,完全注解配置。使得代碼更加簡(jiǎn)潔。
在數(shù)據(jù)庫(kù)操作中,我們只需要實(shí)例化FinalDb對(duì)象,通過(guò)FinalDB可以對(duì)user進(jìn)行增加、刪除、修改等操作。
有圖有真相:
轉(zhuǎn)載請(qǐng)注明出處。
總結(jié)
以上是生活随笔為你收集整理的android+final+框架,使用android快速开发框架afinal 开发android应用程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: NVIDIA增速远超Intel,造成的威
- 下一篇: Element UI 与 Vuetify