使用android快速開發框架afinal 開發android應用程序

首先介紹下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類,很簡單,就三個屬性,代碼如下:

  1. package com.yangfuhai.afinal;  
  2.   
  3. import net.tsz.afinal.annotation.sqlite.Id;  
  4.   
  5. public class User {  
  6.   
  7.     @Id(column="myId")  
  8.     private int userId;  
  9.       
  10.     private String name;  
  11.     private String email;  
  12.       
  13.       
  14.     //getter setter ...   
  15.       
  16.       
  17. }  
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的代碼:

  1. package com.yangfuhai.afinal;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import net.tsz.afinal.FinaActivity;  
  7. import net.tsz.afinal.FinalDb;  
  8. import net.tsz.afinal.annotation.view.ViewInject;  
  9. import android.os.Bundle;  
  10. import android.text.TextUtils;  
  11. import android.view.View;  
  12. import android.view.ViewGroup;  
  13. import android.widget.BaseAdapter;  
  14. import android.widget.Button;  
  15. import android.widget.EditText;  
  16. import android.widget.ListView;  
  17. import android.widget.TextView;  
  18. import android.widget.Toast;  
  19.   
  20. /** 
  21.  * @title 這是 afinal demo 
  22.  * @description 描述 
  23.  * @company 探索者網絡工作室(www.tsz.net) 
  24.  * @author michael Young (www.YangFuhai.com) 
  25.  * @version 1.0 
  26.  * @created 2012-10-17 
  27.  */  
  28. public class AfinalDemoActivity extends FinaActivity {  
  29.       
  30.     @ViewInject(id=R.id.btn_add,click="btnClick") Button BtnAdd;  
  31.     @ViewInject(id=R.id.btn_refresh,click="btnClick") Button BtnRefresh;  
  32.       
  33.     @ViewInject(id=R.id.listView,itemClick="itemClick") ListView listView;  
  34.       
  35.     @ViewInject(id=R.id.edit_name) EditText edit_name;  
  36.     @ViewInject(id=R.id.edit_email) EditText edit_email;  
  37.       
  38.     List<User> mListViewData = new ArrayList<User>();  
  39.       
  40.     FinalDb db;  
  41.       
  42.     public void onCreate(Bundle savedInstanceState) {  
  43.         super.onCreate(savedInstanceState);  
  44.         setContentView(R.layout.main);  
  45.         db = FinalDb.creat(this);  
  46.         listView.setAdapter(mListAdapter);  
  47.     }  
  48.       
  49.     public void btnClick(View v){  
  50.         if(v == BtnAdd){  
  51.             String name = edit_name.getText().toString();  
  52.             String email = edit_email.getText().toString();  
  53.               
  54.             if(!TextUtils.isEmpty(name) && !TextUtils.isEmpty(email)){  
  55.                 User user = new User();  
  56.                 user.setEmail(email);  
  57.                 user.setName(name);  
  58.                   
  59.                 if(v.getTag()!=null){  
  60.                     int id = Integer.valueOf(v.getTag().toString());  
  61.                     user.setUserId(id);  
  62.                     db.update(user);  
  63.                     showToast("更新成功");  
  64.                       
  65.                 }else{  
  66.                     db.save(user);  
  67.                     showToast("添加成功");  
  68.                 }  
  69.                   
  70.                 edit_name.setText("");  
  71.                 edit_email.setText("");  
  72.                 BtnAdd.setTag(null);  
  73.                 BtnAdd.setText("添加數據");  
  74.                   
  75.             }  
  76.         }else if(v == BtnRefresh){  
  77.             mListViewData.clear();  
  78.             mListViewData.addAll(db.findAll(User.class));  
  79.             mListAdapter.notifyDataSetChanged();  
  80.         }  
  81.     }  
  82.       
  83.       
  84.     private View.OnClickListener itemButtonClick = new View.OnClickListener() {  
  85.         public void onClick(View v) {  
  86.             Object obj = v.getTag();  
  87.             if(obj instanceof Integer){  
  88.                 int positon = Integer.valueOf(obj.toString());  
  89.                 User user = mListViewData.get(positon);  
  90.                 if(v.getId() == R.id.item_btn_del){ //listview的刪除按鈕   
  91.                       
  92. //                  db.deleteById(User.class, user.getUserId());//也可以用這種方式刪除   
  93.                     db.deleteById(user);  
  94.                       
  95.                     showToast("刪除成功");  
  96.                     BtnRefresh.performClick();//刷新列表   
  97.                       
  98.                 }else if(v.getId() == R.id.item_btn_update){//listview的更新按鈕   
  99.                     edit_email.setText(user.getEmail());  
  100.                     edit_name.setText(user.getName());  
  101.                       
  102.                     BtnAdd.setText("更新數據");  
  103.                     BtnAdd.setTag(user.getUserId());  
  104.                 }  
  105.             }  
  106.         }  
  107.     };  
  108.       
  109.     private void showToast(String strMsg){  
  110.         Toast.makeText(this, strMsg, 0).show();  
  111.     }  
  112.       
  113.       
  114.       
  115.     private BaseAdapter mListAdapter = new BaseAdapter() {  
  116.           
  117.         public View getView(int position, View convertView, ViewGroup parent) {  
  118.             View item = View.inflate(AfinalDemoActivity.this, R.layout.listitem, null);  
  119.               
  120.             TextView tv_id = (TextView) item.findViewById(R.id.item_id);  
  121.             TextView tv_name = (TextView) item.findViewById(R.id.item_name);  
  122.             TextView tv_email = (TextView) item.findViewById(R.id.item_email);  
  123.               
  124.             Button btn_del = (Button) item.findViewById(R.id.item_btn_del);  
  125.             Button btn_update = (Button) item.findViewById(R.id.item_btn_update);  
  126.               
  127.             User user= mListViewData.get(position);  
  128.             tv_id.setText("id:"+user.getUserId()+"");  
  129.             tv_name.setText("名字:"+user.getName());  
  130.             tv_email.setText("郵箱:"+user.getEmail());  
  131.               
  132.             btn_del.setTag(position);  
  133.             btn_update.setTag(position);  
  134.             btn_del.setOnClickListener(itemButtonClick);  
  135.             btn_update.setOnClickListener(itemButtonClick);  
  136.               
  137.             return item;  
  138.         }  
  139.           
  140.         public long getItemId(int position) {  
  141.             return position;  
  142.         }  
  143.           
  144.         public Object getItem(int position) {  
  145.             return mListViewData.get(position);  
  146.         }  
  147.           
  148.         public int getCount() {  
  149.             return mListViewData.size();  
  150.         }  
  151.     };  
  152.       
  153.       
  154.       
  155. }  
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


轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章