Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android學習之通過sqlite數據庫實現記事本

android學習之通過sqlite數據庫實現記事本

編輯:關於Android編程

最近學習了數據庫,於是寫了一個記事本來體驗了一下數據庫因為最近的事情比較多,所以界面或者有些設計不是那麼完美,但是作為一個可擴展的筆記本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();	
	}

}
布局:

主界面


    
   
   
   
      
   
   
   
   
       

注冊界面:


    
   
   
   
   
      
   
   
   

      
   
   
   
        
顯示記事本的list



    






    
       




記事本的編輯框:



    
       
       
           
代碼稍微有點多,大家耐心看一下。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved