关于Android SQLite不得不说的故事。。

来源:互联网 发布:安德罗妮淘宝店 编辑:程序博客网 时间:2024/05/30 23:19

这是我写的一个记账本源码,对于初学者来说很有用。。

暂时先把代码贴出来,后期在进行详细的更新说明


LoginActivity源代码:

package com.ikras.accountbook;import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.Toast;import com.ikras.db.DatabaseOperator;public class LoginActivity extends Activity{private static final String TAG = "LoginActivity";private static Boolean isExit = false;private static Boolean hasTask = false;private SharedPreferences mPreferences;private Button loginBtn;private Button setpassBtn;private EditText passInput;private Button cleanBtn;private CheckBox isRempass;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.login);passInput = (EditText) findViewById(R.id.pass_input);cleanBtn = (Button) findViewById(R.id.clean);loginBtn = (Button) findViewById(R.id.loginBtn);setpassBtn = (Button) findViewById(R.id.setpassBtn);isRempass = (CheckBox) findViewById(R.id.isRempass);//DatabaseOperator p = new DatabaseOperator(getApplicationContext());//p.delete(1);//Log.d(TAG, "删除成功");init();}@Overrideprotected void onStop(){mPreferences = getSharedPreferences("password",LoginActivity.MODE_PRIVATE);SharedPreferences.Editor passEditor = mPreferences.edit();passEditor.putBoolean("isRempass", isRempass.isChecked());passEditor.commit();super.onStop();}private void init(){mPreferences = this.getSharedPreferences("password",LoginActivity.MODE_WORLD_READABLE);// 设置密码按钮监听setpassBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(LoginActivity.this, SetPassActivity.class);startActivity(intent);}});// 设置清空按钮监听器cleanBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubpassInput.setText("");}});// 设置登录按钮监听loginBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubString savedPassword = mPreferences.getString("password", "");if (passInput.getText().toString().equals(savedPassword)){if ("".equals(passInput.getText().toString())){Toast.makeText(LoginActivity.this, "密码不能为空!",Toast.LENGTH_LONG).show();return;}Intent intent = new Intent();intent.setClass(LoginActivity.this, MainActivity.class);startActivity(intent);}else{Toast.makeText(LoginActivity.this, "密码错误!",Toast.LENGTH_LONG).show();}}});// 设置是否记住密码if (mPreferences.getBoolean("isRempass", false)){passInput.setText(mPreferences.getString("password", ""));isRempass.setChecked(true);}}TimerTask task = new TimerTask(){@Overridepublic void run(){isExit = false;hasTask = true;}};@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){// TODO Auto-generated method stub// 双击返回退出程序Timer tExit = new Timer();if (keyCode == KeyEvent.KEYCODE_BACK){if (isExit == false){isExit = true;Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();if (!hasTask){tExit.schedule(task, 2000);}}else{finish();System.exit(0);}}return false;}}

SetPassActivity源码:

package com.ikras.accountbook;import android.app.Activity;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.EditText;import android.widget.ImageButton;import android.widget.Toast;public class SetPassActivity extends Activity{private ImageButton setpasscancelBtn;private ImageButton setpasssureBtn;private EditText oldpass;private EditText confirmpass;private EditText setpass;private SharedPreferences mPreferences;@Overrideprotected void onCreate(Bundle savedInstanceState){// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.setpass);init();}private void init(){setpasscancelBtn = (ImageButton) findViewById(R.id.setpass_cancel);setpasssureBtn = (ImageButton) findViewById(R.id.setpass_sure);oldpass = (EditText) findViewById(R.id.oldpass);setpass = (EditText) findViewById(R.id.setpass);confirmpass = (EditText) findViewById(R.id.confirmpass);mPreferences = getSharedPreferences("password", MODE_WORLD_WRITEABLE);// 设置密码按钮监听setpasssureBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubif (mPreferences.getBoolean("issetpass", true)){String savedPassword = mPreferences.getString("password","");if (oldpass.getText().toString().equals(savedPassword)){Editor passEditor = mPreferences.edit();passEditor.putString("password", confirmpass.getText().toString());passEditor.putBoolean("issetpass", true);passEditor.putBoolean("isRempass", false);passEditor.commit();finish();System.gc();Toast.makeText(SetPassActivity.this, "设置成功!记住哦~",Toast.LENGTH_LONG).show();return;}else if ("".equals(oldpass.getText().toString())){Toast.makeText(SetPassActivity.this, "请输入原密码",Toast.LENGTH_LONG).show();return;}else{Toast.makeText(SetPassActivity.this, "原密码输入错误!",Toast.LENGTH_LONG).show();return;}}if ("".equals(setpass.getText().toString())){Toast.makeText(SetPassActivity.this, "密码不能为空!",Toast.LENGTH_LONG).show();return;}if ("".equals(confirmpass.getText().toString())){Toast.makeText(SetPassActivity.this, "确认密码不能为空!",Toast.LENGTH_LONG).show();return;}if (!(setpass.getText().toString().equals(confirmpass.getText().toString()))){Toast.makeText(SetPassActivity.this, "两次输入不一致!",Toast.LENGTH_LONG).show();return;}}});// 取消按钮监听setpasscancelBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubfinish();System.gc();}});}}

MainActivity源码:

package com.ikras.accountbook;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ImageButton;import android.widget.ListView;import android.widget.TextView;import com.ikras.bean.AccountList;import com.ikras.db.DatabaseOperator;import com.ikras.db.DbAdapter;public class MainActivity extends Activity{private ImageButton delBtn;private ImageButton addBtn;private ListView bill_list;private DbAdapter listAdapter;private ArrayList<AccountList> mList;private Map<Integer, Boolean> isCheckedMap;private TextView totalLost;private TextView totalGet;private DatabaseOperator operator;private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState){// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.bill_list);delBtn = (ImageButton) findViewById(R.id.del_button);addBtn = (ImageButton) findViewById(R.id.add_button);bill_list = (ListView) findViewById(R.id.bill_list);totalLost = (TextView) findViewById(R.id.totalLost);totalGet = (TextView) findViewById(R.id.totalGet);init();}@Overrideprotected void onResume(){// TODO Auto-generated method stubsuper.onResume();// 设置总收入和总支出TextViewint totalget = operator.getTotal(1);int totallost = operator.getTotal(0);totalGet.setText(totalget + "");totalLost.setText(totallost + "");}private void init(){// 在ListView中显示数据库中的表数据operator = new DatabaseOperator(getApplicationContext());mList = operator.inquire();// for (AccountList list : mList)// {// list.getType();// list.getMoney();// list.getTime();// }// listAdapter = new DbAdapter(MainActivity.this, mList, isCheckedMap);// bill_list.setAdapter(listAdapter);isCheckedMap = new HashMap<Integer, Boolean>();for (int i = 0; i < mList.size(); i++){isCheckedMap.put(i, false);}listAdapter = new DbAdapter(MainActivity.this, mList, isCheckedMap);bill_list.setAdapter(listAdapter);bill_list.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id){// TODO Auto-generated method stubIntent intent = new Intent(MainActivity.this,EditActivity.class);Bundle bundle = new Bundle();bundle.putInt("id", mList.get(position).getId());bundle.putInt("type", mList.get(position).getType());bundle.putString("address", mList.get(position).getAddress());bundle.putString("body", mList.get(position).getBody());bundle.putString("money", mList.get(position).getMoney());bundle.putString("date", mList.get(position).getTime());bundle.putString("time", mList.get(position).getTime());intent.putExtras(bundle);startActivity(intent);finish();System.gc();}});// 删除按钮监听器delBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){List<Integer> ids = new ArrayList<Integer>();List<AccountList> acs = new ArrayList<AccountList>();if (isCheckedMap != null && isCheckedMap.size() > 0){for (int i = 0; i < isCheckedMap.size(); i++){if (isCheckedMap.get(i)){ids.add(mList.get(i).getId());// 要删除的所在Id;acs.add(mList.get(i));}}for (AccountList a : acs){mList.remove(a);// 移除对象}operator.delete(ids);listAdapter.notifyDataSetChanged();//刷新页面//Intent intent = new Intent(MainActivity.this, MainActivity.class);//finish();//System.gc();//startActivity(intent);int totalget = operator.getTotal(1);int totallost = operator.getTotal(0);totalGet.setText(totalget + "");totalLost.setText(totallost + "");}}});// 添加按钮监听器addBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(MainActivity.this, EditActivity.class);startActivity(intent);finish();System.gc();}});}}

EditActivity源码:

package com.ikras.accountbook;import java.text.SimpleDateFormat;import java.util.Calendar;import android.app.Activity;import android.app.AlertDialog;import android.app.DatePickerDialog;import android.app.Dialog;import android.app.TimePickerDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.DatePicker;import android.widget.EditText;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.TimePicker;import android.widget.Toast;import com.ikras.bean.AccountList;import com.ikras.db.DatabaseOperator;public class EditActivity extends Activity{private static final int DATE_PICKER_DIALOG = 0;private static final int TIME_PICKER_DIALOG = 1;private static final String DATE_FORMAT = "yyyy-MM-dd";private static final String TIME_FORMAT = "kk:mm";public static final String DATE_TIME_FORMAT = "yyyy-MM-dd kk:mm";protected static final String TAG = "EditActivity";private int type;private Button datepicker;private Button timepicker;private Button saveBtn;private Button cancelBtn;private RadioGroup typeGrp;private EditText address;private EditText content;private EditText moneyInput;private RadioButton getBtn;private RadioButton lostBtn;// 获取日历private Calendar mCalendar = Calendar.getInstance();@Overrideprotected void onCreate(Bundle savedInstanceState){// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.editor);typeGrp = (RadioGroup) findViewById(R.id.typeGrp);address = (EditText) findViewById(R.id.address);content = (EditText) findViewById(R.id.body);moneyInput = (EditText) findViewById(R.id.money_input);datepicker = (Button) findViewById(R.id.datepicker);timepicker = (Button) findViewById(R.id.timepicker);cancelBtn = (Button) findViewById(R.id.cancel);saveBtn = (Button) findViewById(R.id.save);getBtn = (RadioButton) findViewById(R.id.get);lostBtn = (RadioButton) findViewById(R.id.lost);// 初始化init();}private void editTip(){if ("".equals(address.getText().toString())){Toast.makeText(EditActivity.this, "请输入地址!", Toast.LENGTH_LONG).show();}else if ("".equals(content.getText().toString())){Toast.makeText(EditActivity.this, "请输入事件!", Toast.LENGTH_LONG).show();}else if ("".equals(moneyInput.getText().toString())){Toast.makeText(EditActivity.this, "请输入金额!", Toast.LENGTH_LONG).show();}else if (getBtn.isChecked() == false && lostBtn.isChecked() == false){Toast.makeText(EditActivity.this, "请选择类型!", Toast.LENGTH_LONG).show();}return;}private void init(){final DatabaseOperator dbHelper = new DatabaseOperator(this.getBaseContext());final AccountList list = new AccountList();// 单选按钮监听typeGrp.setOnCheckedChangeListener(new OnCheckedChangeListener(){@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId){// TODO Auto-generated method stubswitch (checkedId){case R.id.get:type = 1;break;case R.id.lost:type = 0;break;default:break;}}});// 取消按钮监听cancelBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubfinish();System.gc();Intent intent = new Intent();intent.setClass(EditActivity.this, MainActivity.class);startActivity(intent);}});Intent intent = this.getIntent();final Bundle bundle = intent.getExtras();if (bundle != null){// 将日期时间分开存入数组,如yyyy-MM-dd kk:mm// 拆成DateTime[0]=yyyy-MM-dd,DateTime[1]=kk:mmString DateTime[] = bundle.getString("time").split("[ ]");// 将数据填充到对应的输入框if (bundle.getInt("type") == 0){lostBtn.setChecked(true);}else{getBtn.setChecked(true);}address.setText(bundle.getString("address"));content.setText(bundle.getString("body"));moneyInput.setText("" + bundle.getString("money"));// datepicker.setText(DateTime[0]);// timepicker.setText(DateTime[1]);// 更新按钮监听器saveBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubSimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT);String reminderDateTime = dateTimeFormat.format(mCalendar.getTime());if (getBtn.isChecked() == false && lostBtn.isChecked() == false || "".equals(address.getText().toString()) || "".equals(content.getText().toString()) || "".equals(moneyInput.getText().toString())){// 无输入状态提醒editTip();}else{// 获取页面中的所有信息并保存至list集合里面list.setId(bundle.getInt("id"));list.setType(type);list.setAddress(address.getText().toString());list.setBody(content.getText().toString());list.setMoney(moneyInput.getText().toString());list.setTime(reminderDateTime);dbHelper.edit(list);// Log.d(TAG, "修改成功!");finish();System.gc();Intent intent = new Intent();intent.setClass(EditActivity.this, MainActivity.class);startActivity(intent);}}});}else{// 保存按钮监听器saveBtn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubSimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT);String reminderDateTime = dateTimeFormat.format(mCalendar.getTime());if (getBtn.isChecked() == false && lostBtn.isChecked() == false || "".equals(address.getText().toString()) || "".equals(content.getText().toString()) || "".equals(moneyInput.getText().toString())){// 无输入状态提醒editTip();}else{// 获取页面中的所有信息并保存至list集合里面list.setType(type);list.setAddress(address.getText().toString());list.setBody(content.getText().toString());list.setMoney(moneyInput.getText().toString());list.setTime(reminderDateTime);dbHelper.insert(list);// Log.d(TAG, "插入成功!");finish();System.gc();Intent intent = new Intent();intent.setClass(EditActivity.this, MainActivity.class);startActivity(intent);}}});}datepicker.setOnClickListener(new OnClickListener(){public void onClick(View v){showDialog(DATE_PICKER_DIALOG);}});timepicker.setOnClickListener(new OnClickListener(){public void onClick(View v){showDialog(TIME_PICKER_DIALOG);}});updateDateButtonText();updateTimeButtonText();}@SuppressWarnings("deprecation")@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){if (keyCode == KeyEvent.KEYCODE_BACK){// 创建退出对话框AlertDialog isExit = new AlertDialog.Builder(this).create();// 设置对话框标题isExit.setTitle("温馨提示");// 设置对话框消息isExit.setMessage("确定要退出吗?");// 添加选择按钮并注册监听isExit.setButton("确定", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){// TODO Auto-generated method stubfinish();System.gc();Intent intent = new Intent();intent.setClass(EditActivity.this, MainActivity.class);startActivity(intent);}});isExit.setButton2("取消", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){// TODO Auto-generated method stubdialog.cancel();}});// 显示对话框isExit.show();}return false;}// showDialog()会调用onCreateDialog方法@Overrideprotected Dialog onCreateDialog(int id){switch (id){case DATE_PICKER_DIALOG:return showDatePicker();case TIME_PICKER_DIALOG:return showTimePicker();}return super.onCreateDialog(id);}// 日期对话框private DatePickerDialog showDatePicker(){DatePickerDialog datePicker = new DatePickerDialog(EditActivity.this,new DatePickerDialog.OnDateSetListener(){public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth){mCalendar.set(Calendar.YEAR, year);mCalendar.set(Calendar.MONTH, monthOfYear);mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);updateDateButtonText();}}, mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH),mCalendar.get(Calendar.DAY_OF_MONTH));return datePicker;}// 时间对话框private TimePickerDialog showTimePicker(){TimePickerDialog timePicker = new TimePickerDialog(this,new TimePickerDialog.OnTimeSetListener(){public void onTimeSet(TimePicker view, int hourOfDay, int minute){mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);mCalendar.set(Calendar.MINUTE, minute);updateTimeButtonText();}}, mCalendar.get(Calendar.HOUR_OF_DAY),mCalendar.get(Calendar.MINUTE), true);return timePicker;}// 更新时间按钮文字private void updateTimeButtonText(){SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_FORMAT);String timeForButton = timeFormat.format(mCalendar.getTime());timepicker.setText(timeForButton);}// 更新日期按钮文字private void updateDateButtonText(){SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);String dateForButton = dateFormat.format(mCalendar.getTime());datepicker.setText(dateForButton);}}

AccountList Bean源码:

package com.ikras.bean;public class AccountList{private int id;private boolean checkbox;private int type;// 0为支出,1为收入private String address;private String body;private String money;private String time;public int getId(){return id;}public void setId(int id){this.id = id;}public boolean getCheckbox(){return checkbox;}public void setCheckbox(boolean checkbox){this.checkbox = checkbox;}public String getAddress(){return address;}public void setAddress(String address){this.address = address;}public String getBody(){return body;}public void setBody(String body){this.body = body;}public String getMoney(){return money;}public void setMoney(String money){this.money = money;}public int getType(){return type;}public void setType(int type){this.type = type;}public String getTime(){return time;}public void setTime(String time){this.time = time;}}

数据库创建类DatabaseHelper源码:

package com.ikras.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class DatabaseHelper extends SQLiteOpenHelper{public DatabaseHelper(Context context, String name, CursorFactory factory,int version){super(context, name, factory, version);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db){// TODO Auto-generated method stubdb.execSQL("create table book(id integer primary key autoincrement, type integer not null, address text not null, body text not null, money integer not null, time text not null);");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){// TODO Auto-generated method stub}}

数据库操作类DatabaseOperator源码:

package com.ikras.db;import java.util.ArrayList;import java.util.List;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import com.ikras.bean.AccountList;public class DatabaseOperator{private SQLiteDatabase dbHander;private DatabaseHelper helper;private static final String DBNAME = "Account.db";private static final int VERSION = 1;public static final String TABLE_NAME = "book";public static final String KEY_TITLE = "title";public static final String KEY_BODY = "body";public static final String KEY_DATE_TIME = "date_time";public static final String KEY_ROWID = "id";public DatabaseOperator(Context context){helper = new DatabaseHelper(context, DBNAME, null, VERSION);}// 插入数据public void insert(AccountList item){dbHander = helper.getWritableDatabase();dbHander.execSQL("insert into book(type,address,body,money,time) values(?,?,?,?,?)",new Object[] { item.getType(), item.getAddress(), item.getBody(), item.getMoney(), item.getTime() });dbHander.close();}// 删除表// public void delTb(String tableName)// {// dbHander.execSQL("drop table ?");// }// 删除表数据public void delete(List<Integer> ids){dbHander = helper.getWritableDatabase();// dbHander.execSQL("delete from " + TABLE_NAME + "where id=? ",// new Object[] { id.toString() });// 此法对SQLite无效for (int id : ids){dbHander.delete(TABLE_NAME, "id=" + id, null);}dbHander.close();}// 更新表数据public void edit(AccountList item){try{dbHander = helper.getWritableDatabase();ContentValues values = new ContentValues();values.put("type", item.getType());values.put("address", item.getAddress());values.put("body", item.getBody());values.put("money", item.getMoney());values.put("time", item.getTime());// 不知道为什么不行// dbHander.execSQL(// "update " + TABLE_NAME +// "set type='?',date='?',body='?',money='?' where " + "id=?",// new Object[] { item.getType(), item.getDate(), item.getBody(), item// .getMoney(), item.getId() });dbHander.update(TABLE_NAME, values, "id=" + item.getId(), null);dbHander.close();}catch (SQLException e){// TODO: handle exception}finally{dbHander.close();}}// 查询表数据public ArrayList<AccountList> inquire(){ArrayList<AccountList> lists = new ArrayList<AccountList>();AccountList tusers = null;dbHander = helper.getWritableDatabase();// Cursor cursor=db.rawQuery("select * from t_users limit ?,?", new// String[]{offset.toString(),maxLength.toString()});// 这里支持类型MYSQL的limit分页操作Cursor cursor = dbHander.rawQuery("select * from book", null);while (cursor.moveToNext()){tusers = new AccountList();tusers.setId(cursor.getInt(cursor.getColumnIndex("id")));tusers.setType(cursor.getInt(cursor.getColumnIndex("type")));tusers.setAddress(cursor.getString(cursor.getColumnIndex("address")));tusers.setBody(cursor.getString(cursor.getColumnIndex("body")));tusers.setMoney(cursor.getString(cursor.getColumnIndex("money")));tusers.setTime(cursor.getString(cursor.getColumnIndex("time")));lists.add(tusers);}dbHander.close();return lists;}// 查询所有收入和支出public int getTotal(int type){dbHander = helper.getWritableDatabase();Cursor cursor = dbHander.rawQuery("select money from book where type=" + type, null);int count = 0;// 初始化填入值while (cursor.moveToNext()){int num = cursor.getInt(cursor.getColumnIndex("money"));count += num;}dbHander.close();return count;}}

数据库适配器DbAdapter源码:

package com.ikras.db;import java.util.ArrayList;import java.util.Map;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.TextView;import com.ikras.accountbook.R;import com.ikras.bean.AccountList;public class DbAdapter extends BaseAdapter{private ArrayList<AccountList> mList;private Map<Integer, Boolean> isCheckedMap;private LayoutInflater inflater;// 构造函数public DbAdapter(Context context, ArrayList<AccountList> mList, Map<Integer, Boolean> isCheckedMap){super();this.mList = mList;this.isCheckedMap = isCheckedMap;inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);}// 在适配器中有多少数据项、@Overridepublic int getCount(){// TODO Auto-generated method stubreturn mList.size();}// 获取集合中指定位置数据项@Overridepublic Object getItem(int position){// TODO Auto-generated method stubreturn mList.get(position);}// 获取列表中指定行的Id@Overridepublic long getItemId(int position){// TODO Auto-generated method stubreturn mList.get(position).getId();}@Overridepublic View getView(final int position, View convertView, ViewGroup parent){// TODO Auto-generated method stubViewHolder holder = null;final AccountList accountList = mList.get(position);if (convertView == null){holder = new ViewHolder();convertView = inflater.inflate(R.layout.list_row, null);holder.account_checked = (CheckBox) convertView.findViewById(R.id.account_checked);holder.type = (TextView) convertView.findViewById(R.id.type);holder.money = (TextView) convertView.findViewById(R.id.money);holder.time = (TextView) convertView.findViewById(R.id.time);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}if (accountList.getType() == 0)holder.type.setText("支出");else if (accountList.getType() == 1)holder.type.setText("收入");String in_decrease = accountList.getType() == 0 ? "-" : "+";holder.money.setText("  ¥" + in_decrease + accountList.getMoney());holder.time.setText("   " + accountList.getTime());holder.account_checked.setChecked(isCheckedMap.get(position));holder.account_checked.setOnCheckedChangeListener(new OnCheckedChangeListener(){@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked){// TODO Auto-generated method stubif (isChecked){isCheckedMap.put(position, true);}else{isCheckedMap.put(position, false);}}});return convertView;}static class ViewHolder{private CheckBox account_checked;private TextView type;private TextView money;private TextView time;}}