android学习之通过sqlite数据库实现记事本

最近学习了数据库,于是写了一个记事本来体验了一下数据库因为最近的事情比较多,所以界面或者有些设计不是那么完美,但是作为一个可扩展的笔记本demo也已经是足够了,这个例子实现的是,可以注册多个用户,然后每个用户都对应有一个记事本记录,ok,代码:

package com.example.logindemo2;

import com.jk.dao.SqlistBase;

import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Note;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
	
	SqlistBase mdatabase;
	SQLiteDatabase db;
	ContentValues cv;
	Button btn_login, btn_register;
	EditText et_name, et_pwd;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 创建数据库对象
		init();
	}

	private void init() {
		//找到对应的控件对应的id
		btn_login = (Button) findViewById(R.id.btn_login);
		btn_register = (Button) findViewById(R.id.btn_register);
		et_name = (EditText) findViewById(R.id.name);
		et_pwd = (EditText) findViewById(R.id.key);
		//初始化SqlistBase对象
		mdatabase = new SqlistBase(this);
		//得到对应的数据库读写对象
		db = mdatabase.getWritableDatabase();
		//获得一个可以储存数据的对象
		cv = new ContentValues();
		//设置监听事件
		btn_login.setOnClickListener(this);
		btn_register.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		//对点击事件进行判断
		switch (v.getId()) {
		case R.id.btn_login:
			login();
			break;
		case R.id.btn_register:
			register();
			break;
		}

	}

	private void register() {
		Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
		startActivity(intent);

	}

	private void login() {
		//通过控件获得输入的文本信息
		String name=et_name.getText().toString();
		String pwd=et_pwd.getText().toString();
		//查询的键的封装
		String col[]={SqlistBase.ACCOUNT,SqlistBase.PWD};
		//获得遍历的游标
		Cursor cur=db.query(SqlistBase.USER_TABLE_NAME, col, null, null, null, null, null);
		while(cur.moveToNext()){
			//通过游标获得数据库里面的数据
			String namedata=cur.getString(0);
			String pwddata=cur.getString(1);	
			//判断是否和数据库里面的内容是否相等
			if((namedata.equals(name))&&(pwddata.equals(pwd))){
				Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
				Bundle bundle=new Bundle();
				bundle.putString(SqlistBase.ACCOUNT,namedata);
				//在不同的包下面跳转需要加上包名
				Intent intent=new Intent(this,com.jk.note.Note.class);
				intent.putExtras(bundle);
				startActivity(intent);
				
			}		
		}
		
		
		
		
	}
}


package com.example.logindemo2;

import com.jk.dao.SqlistBase;

import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;



public class RegisterActivity extends Activity {
	//声明一个可以读写的数据库
	SQLiteDatabase db;
	//申明自己定义的数据库创建的对象
	SqlistBase mdatabase;
	//获得一个可以储存数据的ContentValues封装对象
	ContentValues myContentValus;
	Button btn_register_check;
	EditText et_name_register,et_pwd_register,et_checkpwd_register;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_register);
		init();
		btn_register_check.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//通过控件获得文本的输入的信息
				String name=et_name_register.getText().toString();
				String pwd=et_pwd_register.getText().toString();
				String checkpwd=et_checkpwd_register.getText().toString();
				if(name.equals("")){
					Toast.makeText(RegisterActivity.this,"账户名不能为空", Toast.LENGTH_SHORT).show();
				}else if(pwd.equals("")){
					Toast.makeText(RegisterActivity.this,"密码不能为空", Toast.LENGTH_SHORT).show();
				}else if(!pwd.equals(checkpwd)){
					Toast.makeText(RegisterActivity.this,"两次输入的密码不同", Toast.LENGTH_SHORT).show();
				}else if(pwd.equals(checkpwd)){
					Toast.makeText(RegisterActivity.this,"注册成功", Toast.LENGTH_SHORT).show();
					//将合法的数据写入数据库
					//获得自己写的数据库的对象
					mdatabase=new SqlistBase(RegisterActivity.this);
					//获得可以的数据库
					db=mdatabase.getWritableDatabase();
					//获得可以保存数据的ContentValues对象。
					myContentValus=new ContentValues();
					myContentValus.put(SqlistBase.ACCOUNT,name);
					myContentValus.put(SqlistBase.PWD,pwd);
					db.insert(SqlistBase.USER_TABLE_NAME, null, myContentValus);
					ContentValues myContentValus1 = new ContentValues();
					//写入完成以后关闭数据库
					db.close();
					RegisterActivity.this.finish();
				}
				
			}
		});
	}
	private void init() {
		//找到对应控件的id
		btn_register_check=(Button) findViewById(R.id.btn_register_check);
		et_name_register=(EditText) findViewById(R.id.name_register);
		et_pwd_register=(EditText) findViewById(R.id.key_register);
		et_checkpwd_register=(EditText) findViewById(R.id.check_key_register);	
	}
	
	

}

package com.jk.note;

import java.util.Calendar;

import com.example.logindemo2.R;
import com.jk.dao.SqlistBase;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class Note extends ListActivity implements OnItemLongClickListener {
	//设置数据库里面对应的字段的名字
	public static final String TITLE = "title";
	public static final String BODY = "body";
	public static final String TIME = "created";
	public static final String NTID = "_id";
	//申明一个数据库
	public  static SQLiteDatabase db;
	//一个游标
	public Cursor cursor;
	//当前的用户
	public static String currentAccount;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_note);
		//得到当前登录的账户
		String account = getIntent().getExtras().getString(SqlistBase.ACCOUNT);
		//将当前的账户的名字设置为标题
		setTitle(account);
		//构建当前用户的表名
		currentAccount = "diary" + account;
		//获得数据库对象
		db = Note.this.openOrCreateDatabase("userdatabase.db", MODE_PRIVATE,
				null);
		//读取列表
		readlist();
		//实例化ListView
		ListView lv = this.getListView();
		//为lv设置长按监听事件
		lv.setOnItemLongClickListener(this);

	}

	public void readlist() {
		try {
			//如果数据库中存在当前对象,那么就查询
			cursor = db.query(true, currentAccount, new String[] { NTID, TITLE,
					BODY, TIME }, null, null, null, null, null, null);
		} catch (Exception e) {
		//如果数据库中不存在当前对象就创建
			String sql2 = "create table " + currentAccount + "(" + NTID
					+ " integer primary key autoincrement, " + TITLE
					+ " text not null, " + BODY + " text not null, " + TIME
					+ " text not null" + ");";
			db.execSQL(sql2);
			cursor = db.query(true, currentAccount, new String[] { NTID, TITLE,
					BODY, TIME }, null, null, null, null, null, null);
		}
		//将cursor和系统连接起来
		startManagingCursor(cursor);
		
		//需要查询的数据
		String[] from = new String[] { TITLE, TIME };
		//查询的数据的显示格式
		int[] to = new int[] { R.id.tv_title, R.id.tv_time };
		SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
				R.layout.note_row, cursor, from, to);
		setListAdapter(adapter);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		//为菜单添加一个点击按钮的
		menu.add(0, 0, 0, "添加日记");
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		//响应事件
		if (item.getItemId() == 0) {
			createDiary();
		}
		return true;
	}

	private void createDiary() {
		//创建一个日志,主要是跳转到编辑界面
		Intent intent = new Intent(this, NoteEdit.class);
		startActivity(intent);
		
		
	}

	public void createDiary(String title, String body) {
		//获得一个cv来保存数据
		ContentValues cv = new ContentValues();
		cv.put(TITLE, title);
		cv.put(BODY, body);
		Calendar calendar = Calendar.getInstance();
		String time = calendar.get(Calendar.MONTH + 1) + "月"
				+ calendar.get(Calendar.DAY_OF_MONTH) + "日"
				+ calendar.get(Calendar.HOUR_OF_DAY) + "时";
       cv.put(TIME, time);
       //将数据写入数据库之中
       db.insert(currentAccount, null, cv);
	
		
	}
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
    	// TODO Auto-generated method stub
    	super.onListItemClick(l, v, position, id);
    	//获得游标
    	Cursor mycursor=cursor;
    	//将目标移动到点击的位置
    	mycursor.move(position);
    	Intent intent=new Intent(this,NoteEdit.class);
    	intent.putExtra(NTID, id);
    	intent.putExtra(TITLE, mycursor.getString(mycursor.getColumnIndexOrThrow(TITLE)));
    	intent.putExtra(BODY, mycursor.getString(mycursor.getColumnIndexOrThrow(BODY)));
       //用带有数据的intent启动activity
    	startActivityForResult(intent,1);
    }
	@Override
	public boolean onItemLongClick(AdapterView arg0, View arg1, int arg2,
			long arg3) {
		//长按以后直接删除,这里本来应该是弹出对话框的,但是最近事情有点多,朋友就自己去添加吧
		db.delete(currentAccount, NTID+"="+arg3,null);
		//刷新
		readlist();
		
		
		return false;
	}


	public void updataDiary(Long rowid, String title2, String body2) {
		ContentValues cv = new ContentValues();
	//同样创一个cv来保存数据
		cv.put(TITLE, title2);
		cv.put(BODY, body2);
		Calendar calendar = Calendar.getInstance();
		String time = calendar.get(Calendar.MONTH + 1) + "月"
				+ calendar.get(Calendar.DAY_OF_MONTH) + "日"
				+ calendar.get(Calendar.HOUR_OF_DAY) + "时";
       cv.put(TIME, time);
       //更新数据库
       db.update(currentAccount, cv, NTID+"="+rowid,null);
		
	}

}

package com.jk.note;

import com.example.logindemo2.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class NoteEdit extends Activity {
	//申明需要的一些控件
	EditText et_title,et_body;
	Button btn_confirm,btn_cancle;
	public Note currentNote;
	String title,body;
	public Long rowid;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.noto_edit);
		//初始化
		init();
	}
	public void init(){
		//实例化一个Note对象
		currentNote=new Note();
		//绑定控件
		et_title=(EditText) findViewById(R.id.et_title);
		et_body=(EditText) findViewById(R.id.et_body);
		btn_confirm=(Button) findViewById(R.id.btn_confirm);
		btn_cancle=(Button) findViewById(R.id.btn_cancle);
		//如果bundle不为空,得到数据并显示在界面
		Bundle bundle=getIntent().getExtras();
		if(bundle!=null){
		title=bundle.getString(Note.TITLE);
		body=bundle.getString(Note.BODY);
		if(title!=null){
			et_title.setText(title);
		}
		if(body!=null){
			et_body.setText(body);
		}
		//得到传入的id
		rowid=bundle.getLong(Note.NTID);
		}
		
	}
//对不同的事件进行不同的响应
	public void onMyClick(View v){
		switch(v.getId()){
		case R.id.btn_confirm:
			save();
			break;
		case R.id.btn_cancle:
			finish();
			break;
		}
	}
	
//	
	private void save() {
		String title=et_title.getText().toString();
		String body=et_body.getText().toString();
		if(rowid!=null){
			//如果id不为空,那么就更新
			currentNote.updataDiary(rowid,title,body);
		}else{
			//如果id为空,那么就创建
		currentNote.createDiary(title, body);
		}
		Intent mintent=new Intent();
		setResult(RESULT_OK, mintent);
		finish();	
	}

}
布局:

主界面


    
   
   
   
      
   
   
   
   
       

注册界面:


    
   
   
   
   
      
   
   
   

      
   
   
   
        
显示记事本的list



    






    
       




记事本的编辑框:



    
       
       
           
代码稍微有点多,大家耐心看一下。

你可能感兴趣的:(安卓学习笔记)