android学习之通过sqlite数据库实现记事本
来源:互联网 发布:@otree.cn 橙树网络 编辑:程序博客网 时间:2024/05/16 19:46
最近学习了数据库,于是写了一个记事本来体验了一下数据库因为最近的事情比较多,所以界面或者有些设计不是那么完美,但是作为一个可扩展的笔记本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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 创建数据库对象init();}private void init() {//找到对应的控件对应的idbtn_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);}@Overridepublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_register);init();btn_register_check.setOnClickListener(new OnClickListener() {@Overridepublic 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() {//找到对应控件的idbtn_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;@Overrideprotected 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();//实例化ListViewListView 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);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);//为菜单添加一个点击按钮的menu.add(0, 0, 0, "添加日记");return true;}@Overridepublic 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); }@Overridepublic 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;@Overrideprotected 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);}//得到传入的idrowid=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>代码稍微有点多,大家耐心看一下。
0 0
- android学习之通过sqlite数据库实现记事本
- Android记事本开发之SQLite数据库实现
- android之sqlite数据库学习
- android学习之sqlite数据库
- android学习之sqlite数据库
- Android学习之数据库SQLite
- SQLite的学习(记事本的数据库增、删、改、查实现)
- android学习笔记之SQLite数据库存储
- 学习笔记 android数据库之 Sqlite
- Android开发学习之SQLite数据库初探
- android学习笔记之SQLite数据库
- Android基础学习之SQLite数据库
- Android学习之轻量级数据库SQLite
- 我的记事本之-SQLite数据库的使用
- android数据库实例(生词记事本)代码+注释+sqlite
- Android SQLite数据库学习
- Android sqlite数据库学习
- Android 之 SQLite 数据库
- java.lang.Math下的方法
- iOS开发- UICollectionView详解+实例
- Xcode使用技巧
- 微信支付-JSAPI模式开发
- 图片压缩
- android学习之通过sqlite数据库实现记事本
- web测试要点
- 内存溢出
- 公司用到的一些 iOS 开源库和第三方组件
- 解决svn一直提示无更新
- Android:自定义组合控件之动态删减编辑框
- 【Redis数据库安装简介】
- TortoiseSVN中Branching和Merging实践
- 两个iOS 应用间的相互跳转