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();	
	}

}
布局:

主界面

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    <LinearLayout 
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView 
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="用户名"/>
   <EditText 
       android:id="@+id/name"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请输入用户名"/>
   </LinearLayout>
      <LinearLayout 
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView 
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="密码"/>
   <EditText 
       android:id="@+id/key"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请输入密码"/>
   </LinearLayout>
   <LinearLayout 
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:orientation="horizontal">
       <Button 
           android:id="@+id/btn_login"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:onClick="onMyClick"
           android:text="登陆"/>
        <Button 
            android:id="@+id/btn_register"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:onClick="onMyClick"
           android:text="注册"/>
   </LinearLayout>

</LinearLayout>

注册界面:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
    <LinearLayout 
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView 
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="用户名"/>
   <EditText 
       android:id="@+id/name_register"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请输入用户名"/>
   
   </LinearLayout>
      <LinearLayout 
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView 
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="密码"/>
   <EditText 
       android:id="@+id/key_register"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请输入密码"/>
   </LinearLayout>

      <LinearLayout 
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal">
   <TextView 
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:text="密码"/>
   <EditText 
       android:id="@+id/check_key_register"
       android:layout_height="wrap_content"
       android:layout_width="200dp"
       android:hint="请确认密码"/>
   </LinearLayout>
        <Button 
            android:id="@+id/btn_register_check"
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:onClick="onMyClick"
           android:text="注册"/>

</LinearLayout>
显示记事本的list
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
<ListView 
    android:id="@+id/android:list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ></ListView>
<TextView 
    android:id="@+id/android:empty"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="你还没有开始写日记,点击menu添加你的第一篇日记"/>    

</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <TextView 
        android:id="@+id/tv_title"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="第一组"/>
       <TextView 
        android:id="@+id/tv_time"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="199年"/>

</LinearLayout>


记事本的编辑框:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <EditText
        android:id="@+id/et_title"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:hint="请输入标题"
        />
       <EditText
        android:id="@+id/et_body"
        android:layout_height="300dp"
        android:layout_width="match_parent"
        android:hint="请输入内容"
        />
       <LinearLayout 
           android:layout_height="wrap_content"
           android:layout_width="wrap_content"
           android:orientation="horizontal"
           >
           <Button
               android:id="@+id/btn_confirm"
                android:layout_height="wrap_content"
               android:layout_width="wrap_content"
               android:onClick="onMyClick"
               android:text="确定"/>
             <Button
               android:id="@+id/btn_cancle"
                android:layout_height="wrap_content"
               android:layout_width="wrap_content"
                              android:onClick="onMyClick"
               android:text="取消"/>
       </LinearLayout>
       
    

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值