首先介绍下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 ...}

注意:当你的对象中有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 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("添加数据");        }    }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/michael_yy/4659620


转载请注明出处。



更多相关文章

  1. 关于启动Android模拟器时,运行时,会再弹出一个模拟器的问题
  2. android orm映射框架 ormlite (类似于hibernate) 很强大
  3. Android开发之webview和 js 互调
  4. Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示
  5. android与linux内核对比--《Android系统源代码情景分析》试读
  6. Android通过WebView与JS交互的全面方式
  7. Android构建系统和Gradle知识整理
  8. Android与linux的区别与联系
  9. 深入解读Linux与Android的相互关系

随机推荐

  1. Android数字签名解析(三)
  2. android 不同drawable文件对应的dpi值,和
  3. Android Service示例
  4. android Myeclipse7.5运行,HelloWrold,运
  5. android dashboard布局的一个例子
  6. Android中监听"电源键长按"、"Home键"、"
  7. 软键盘弹出挤压画面的问题
  8. Kotlin Multiplatform - 下一代全平台开
  9. 背景透明的 Dialog
  10. android IPC通信(下)-AIDL