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
原创粉丝点击