您的位置:首页 > 数据库

密码盒 基本功能都实现了 下来分享源码 适合刚接触sqlite数据库的亲们使用

2012-10-09 14:43 477 查看
做这个之初是因为女朋友老是忘了自己的很多账号,所以就萌生了一个给他做一个android应用的想法,用了5天吧 ,实现了基本功能,账号添加 删除 修改 都是基于sqlite数据库的。程序很一般,拿出来和大家分享下。牛人就不用看了,新手还是值得学习的!

总共有四个activity:下面这个是显示账号列表的

package com.example.passwordbox;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import database.DBAdapter;
import database.goods;
import ImageAdapter.listAdapter;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class AccountlistActivity extends Activity  implements OnItemClickListener ,OnMenuItemClickListener{
Button btn1=null;
Button btn2=null;
private ListView listview;
DBAdapter db=null;
@SuppressWarnings("rawtypes")
List list=null;
goods good = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.accountlist);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);  //titlebar为自己标题栏的布局
listview=(ListView)findViewById(R.id.list);

db = new DBAdapter(this);
db.open();
btn1=(Button)findViewById(R.id.buttonn);
btn1.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
Intent intent1=new Intent();
intent1.setClass(AccountlistActivity.this, NewActivity.class);
startActivity(intent1);
AccountlistActivity.this.finish();
}
});
btn2=(Button)findViewById(R.id.buttonm);
btn2.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
Intent intent2=new Intent();
intent2.setClass(AccountlistActivity.this, NewActivity.class);
startActivity(intent2);
AccountlistActivity.this.finish();
}
});
listview.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {

// TODO Auto-generated method stub
menu.setHeaderTitle("请选择操作");
menu.add(0, 0, 0, "删除");
menu.add(0, 1, 0, "修改");

}

});
show();
}

//长按菜单响应函数
@Override
public boolean onContextItemSelected(MenuItem item) {
//setTitle("点击了长按菜单里面的第"+item.getItemId()+"个项目");
final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
int id = (int)info.id;//这里的info.id对应的是item对应的值
if(item.getItemId()==0)
{
//根据id删除
db.open();
//int id = (int)info.id;//这里的info.id对应的是item对应的值
showall();
int m=((goods)list.get(id)).getId();
Log.i("删除ID值", ""+id);

// moveToPosition(id)
// db.deleteTitle(id);
db.deleteTitle(m);
db.close();
Toast.makeText(getApplicationContext(), "删除成功",
Toast.LENGTH_SHORT).show();
show();
}
else
{
//根据id
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.reserve, null);
final EditText editTextName = (EditText) textEntryView.findViewById(R.id.editTextName);
final EditText editTextNumEditText = (EditText)textEntryView.findViewById(R.id.editTextNum);
final EditText editTextaccEditText = (EditText)textEntryView.findViewById(R.id.edit);
AlertDialog.Builder ad1 = new AlertDialog.Builder(AccountlistActivity.this);
ad1.setTitle("修改账户及密码:");
ad1.setIcon(android.R.drawable.ic_dialog_info);
ad1.setView(textEntryView);
db.open();
// int id = (int)info.id;//这里的info.id对应的就是item的行号
showall();
editTextaccEditText.setText(((goods)list.get(id)).getName());
editTextName.setText(((goods)list.get(id)).getAccount());
editTextNumEditText.setText(((goods)list.get(id)).getPass());
Log.i("修改账号", ""+((goods)list.get(id)).getAccount());

ad1.setPositiveButton("是", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {

Log.i("111111", editTextName.getText().toString());

int id = (int)info.id;
String name=editTextaccEditText.getText().toString();
String account=editTextName.getText().toString();
String pass=editTextNumEditText.getText().toString();
Log.i("修改ID值", ""+id);

int m=((goods)list.get(id)).getId();
//Log.i("删除ID值", ""+id);
db.updateTitle(m, name,account, pass);
db.close();
show();
Toast.makeText(getApplicationContext(), "修改成功",
Toast.LENGTH_SHORT).show();
}
});
ad1.setNegativeButton("否", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {

}
});
ad1.show();// 显示对话框

}

return super.onContextItemSelected(item);
}
//    protected void showAddDialog() {
//
//
//
//    }

@SuppressWarnings({ "unchecked", "rawtypes" })
public void show()
{

db.open();
showall();
Log.i("查询结果", "内容"+list.toString());
listAdapter adapter = new listAdapter(this.getApplicationContext(), list);
db.close();
listview.setAdapter(adapter);

}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.accountlist, menu);

return true;
}

@Override
//id被点击元素的行id
//视图在adapter中的位置
//在AdapterView中被点击的视图(它是由adapter提供的一个视图)
public void onItemClick(AdapterView<?> AdapterViewparent, View view, int position, long id) {
// TODO Auto-generated method stub
if(id<-1) {
// 点击的是headerView或者footerView
return;
}
int realPosition=(int)id;
//  T item=getItem(realPosition);
// 响应代码

}
public List showall()
{
list=new ArrayList();

Cursor cur=db.getAllTitles();
if(cur==null)
{
Log.i("查询结果", "weikong");
}

for(cur.moveToFirst();!cur.isAfterLast();cur.moveToNext())
{
good=new goods();//必须每次new一个对象  才能使得list add()不断添加
int idColumn=cur.getColumnIndex("_id");
int nameColumn = cur.getColumnIndex("name");
int accColumn = cur.getColumnIndex("account");
int phoneColumn = cur.getColumnIndex("pass");

String name = cur.getString(nameColumn);
String pass = cur.getString(phoneColumn);
String account=cur.getString(accColumn);
String id=cur.getString(idColumn);
good.setId((int)Integer.parseInt(id));
good.setName(name);
good.setAccount(account);
good.setPass(pass);
Log.i("查询结果", "weikong"+good.getName());
list.add(good);
}
return list;
}
@Override
public boolean onMenuItemClick(MenuItem arg0) {
// TODO Auto-generated method stub
return false;
}

}


下面这个是程序启动页面:

package com.example.passwordbox;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;

public class RunActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.run);
new Handler().postDelayed(new Runnable(){
public void run()
{
RedirectNewActivity();
}

}, 2000);
}

public void RedirectNewActivity()
{
Intent intent=new Intent();
intent.setClass(RunActivity.this, NewActivity.class);
startActivity(intent);
RunActivity.this.finish();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.run, menu);
return true;
}
}


下面这个是进去程序后的主页面:

package com.example.passwordbox;

import ImageAdapter.imageAdapter;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageButton;

public class NewActivity extends Activity implements OnItemClickListener, OnClickListener{
private Resources resMgr = null;
Button bt1=null;
@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.news);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);  //titlebar为自己标题栏的布局
resMgr=getResources();
bt1=(Button)findViewById(R.id.buttonn);
bt1.setOnClickListener(this);
GridView gridView = (GridView) findViewById(R.id.gridView1);

String strContent[] = { resMgr.getString(R.string.add),
resMgr.getString(R.string.show),
};

gridView.setAdapter(new imageAdapter(this, strContent));
gridView.setOnItemClickListener(this);
}

private void close() {
new AlertDialog.Builder(this)
// .setIcon(R.drawable.services)
.setTitle(R.string.MAINACTIVITY_POPUP_QUIT_TITLE)
.setMessage(R.string.MAINACTIVITY_POPUP_QUIT_MESSAGE)
.setNegativeButton(R.string.MAINACTIVITY_POPUP_QUIT_CANCEL,
new DialogInterface.OnClickListener() {
// @Override
public void onClick(DialogInterface dialog,
int which) {
}
})
.setPositiveButton(R.string.MAINACTIVITY_POPUP_QUIT_OK,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
finish();
//System.exit(0);
}
}).show();
}

/*
* (non-Javadoc)
*
* @see android.app.Activity#dispatchKeyEvent(android.view.KeyEvent)
*/
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
if (event.getAction() == KeyEvent.ACTION_DOWN
&& event.getRepeatCount() == 0) {
close();// 这是自定义的代码
}
return true;
}
return super.dispatchKeyEvent(event);
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
menu.add(0,0,0,"设置");//第二个参数是menu的id,第4个参数是菜单显示的内容,其余的不重要。
menu.add(0,1,0,"关于");
menu.add(0,2,0,"退出");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
switch(item.getItemId())
{
case 0:
break;
case 1:

new AlertDialog.Builder(this)

.setTitle("关于")

.setMessage("本软件为爱心制作")

.setPositiveButton("确定", null)

.show();
break;
case 2:
this.finish();
break;

}
return true;
}

@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long arg3) {
// TODO Auto-generated method stub
switch(position){
case 0:
{
Intent intent1=new Intent();
intent1.setClass(NewActivity.this, AddaccountActivity.class);
startActivity(intent1);
NewActivity.this.finish();
break;
}
case 1:
{
Intent intent2=new Intent();
intent2.setClass(NewActivity.this, AccountlistActivity.class);
startActivity(intent2);
NewActivity.this.finish();
break;
}

}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub

if (keyCode == KeyEvent.KEYCODE_BACK) {
close();
return true;
} else {
return super.onKeyDown(keyCode, event);
}

}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
close();
}
}


下面这个是添加账号信息的activity:

package com.example.passwordbox;

import database.DBAdapter;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AddaccountActivity extends Activity {
private Button btt1=null;
private Button btt2=null;
private Button btt3=null;
EditText tx1=null;
EditText tx2=null;
EditText tx3=null;
DBAdapter db=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.addaccount);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);  //titlebar为自己标题栏的布局
db = new DBAdapter(this);

tx1=(EditText)findViewById(R.id.editText1);
tx2=(EditText)findViewById(R.id.editText2);
tx3=(EditText)findViewById(R.id.editTextacc);
btt1=(Button)findViewById(R.id.buttonn);
btt1.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
Intent intent1=new Intent();
intent1.setClass(AddaccountActivity.this, NewActivity.class);
startActivity(intent1);
AddaccountActivity.this.finish();
}
});
btt2=(Button)findViewById(R.id.buttonm);
btt2.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
Intent intent2=new Intent();
intent2.setClass(AddaccountActivity.this, NewActivity.class);
startActivity(intent2);
AddaccountActivity.this.finish();
}
});
btt3=(Button)findViewById(R.id.button10);
btt3.setOnClickListener(new Button.OnClickListener()
{

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(tx1.getText().length()!=0||tx1.getText().length()!=0)
{
db.open();
long id=db.insertTitle(tx1.getText().toString(),tx3.getText().toString(), tx2.getText().toString());
Log.i("插入结果", "id"+id);
db.close();
Intent intent2=new Intent();
intent2.setClass(AddaccountActivity.this, AccountlistActivity.class);
startActivity(intent2);
AddaccountActivity.this.finish();
}
else
{
new AlertDialog.Builder(AddaccountActivity.this).setMessage("本框不能为空!").setPositiveButton("确定", null).show();
}
}

});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.addaccount, menu);

return true;
}
}


实体类:

package database;

public class goods {
private int id;
private String name;
private String account;
private String pass;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}

}


数据库操作类:

package database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteCursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

//库表中两个字段AppName  AppPass
public class DBAdapter {

public static final String KEY_ROWID = "_id";
public static  final String AppName="name";
public static  final String AppAccount="account";
public static final String AppPass="pass";
private static final String TAG = "DBAdapter";
private static final String DATABASE_NAME = "BOX";
private static final String DATABASE_TABLE = "yuyu";
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE =
"create table yuyu (_id integer primary key autoincrement, "
+ "name text not null,account text not null, pass text not null);";
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public DBAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//创建一个新的数据库
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DATABASE_CREATE);
}
//升级数据库
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.w(TAG, "Upgrading database from version " + oldVersion
+ " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS titles");
onCreate(db);
}
}
//---打开数据库---

public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}
//---关闭数据库---

public void close()
{
DBHelper.close();
}
//---向数据库插入一个标题---

public long insertTitle(String name,String account ,String pass)
{
ContentValues initialValues = new ContentValues();
//initialValues.put(KEY_ROWID, _id);
initialValues.put(AppName, name);
initialValues.put(AppAccount, account);
initialValues.put(AppPass, pass);
return db.insert(DATABASE_TABLE, null, initialValues);
}
//---删除一个指定的标题---

public boolean deleteTitle(long rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
//---检索所有标题---

public Cursor getAllTitles()
{
return db.query(DATABASE_TABLE, new String[] {KEY_ROWID,AppName,AppAccount,AppPass},null,null,null,null,null);
}
//---检索一个指定的标题---

public Cursor getTitle(long rowId) throws SQLException
{
Cursor mCursor =
db.query(true, DATABASE_TABLE, new String[] {
KEY_ROWID,

AppName,
AppAccount,
AppPass
},
KEY_ROWID + "=" + rowId,
null,
null,
null,
null,
null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
//---更新一个标题---

public boolean updateTitle(long rowId,
String name,String account, String pass)
{
ContentValues args = new ContentValues();
args.put(AppName, name);
args.put(AppAccount, account);
args.put(AppPass, pass);
return db.update(DATABASE_TABLE, args,
KEY_ROWID + "=" + rowId, null) > 0;
}

}


主页面上两个图标的适配类:

package ImageAdapter;

import com.example.passwordbox.R;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class imageAdapter extends BaseAdapter {
private Integer[] arrImage = { R.drawable.epurse, R.drawable.ecard,
};

String arrText[] = null;// {"登录", "充值", "消费", "查询余额", "历史记录", "设置", "关于",
// "帮助","退出"};
private Context mContext;

public imageAdapter(Context context, String[] arrText) {
mContext = context;
this.arrText = arrText;
}

public int getCount() {
return arrImage.length;
}

/*
* (non-Javadoc)
*
* @see android.widget.Adapter#getView(int, android.view.View,
* android.view.ViewGroup)
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = new ViewHolder();
if (convertView == null) {
LayoutInflater mInflater = LayoutInflater.from(mContext);
convertView = mInflater.inflate(R.layout.item, null);
holder.image = (ImageView) convertView.findViewById(R.id.ItemImage);
holder.text = (TextView) convertView.findViewById(R.id.ItemText);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();// imageview=(ImageView)
// convertView;
}
holder.image.setImageResource(arrImage[position]);
holder.text.setText(arrText[position]);
return convertView;
}

public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

private static class ViewHolder {
ImageView image;// 图片
TextView text;// 文字
}
}


list列表的适配类:

package ImageAdapter;

import java.util.List;

import com.example.passwordbox.R;

import database.goods;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class listAdapter extends BaseAdapter{
private List<goods> list;//绑定的数据集
//private int source;//资源布局文件
Context mContext;
private LayoutInflater inflater;
//布局填充器,Android的内置服务,作用:使用xml文件来生成对应的view对象
public listAdapter (Context context,List<goods> good)//int resource
{
this.list=good;
//this.source=resource;
this.mContext=context;
//得到布局填充服务
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}

@Override

public View getView(int position, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
//判断是否为第一页
//提供缓存机制
ViewCache cache;
if(convertView == null){
//为条目创建View对象,生成条目界面对象
convertView = inflater.inflate(R.layout.txview, null);
//得到当前条目的数据
cache = new ViewCache();
cache .name = (TextView)convertView.findViewById(R.id.textView5);
cache .account = (TextView)convertView.findViewById(R.id.textView6);

cache.pass = (TextView)convertView.findViewById(R.id.textView7);

//用视图标识临时存放缓存数据
// convertView.setTag(cache);

}
else
{
cache = (ViewCache) convertView.getTag();

}

//得到当前条目对象
goods stu=new goods();
stu = list.get(position);
Log.i("list内容", ""+list.toString());
//为当前条目赋值

cache.name.setText("        "+stu.getName().toString()+"     ");
cache.account.setText("         "+stu.getAccount());//转化成string
cache.pass.setText("                   "+stu.getPass().toString());
convertView.setTag(cache);
return convertView;

}
private final class ViewCache
{

public TextView name;
public TextView account;
public TextView pass;
}

}


具体的layout有好几个 不在这贴了,想要的同学可以找我,我发给你 我的qq:405356078 加的时候注明博客园 否则不加



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐