标签:
最近学习了数据库,于是写了一个记事本来体验了一下数据库因为最近的事情比较多,所以界面或者有些设计不是那么完美,但是作为一个可扩展的笔记本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>代码稍微有点多,大家耐心看一下。
标签:
原文地址:http://blog.csdn.net/justperseve/article/details/51203133