您的位置:首页 > 移动开发 > Android开发

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

2016-04-20 18:43 549 查看
最近学习了数据库,于是写了一个记事本来体验了一下数据库因为最近的事情比较多,所以界面或者有些设计不是那么完美,但是作为一个可扩展的笔记本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>
代码稍微有点多,大家耐心看一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: