編輯:關於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
代碼稍微有點多,大家耐心看一下。
如果能在構建代碼前發現代碼中潛在的問題會怎麼樣呢?很有趣的是,Eclipse 插件中就有這樣的工具,比如 JDepend 和 CheckStyle,它們能幫您在軟件問題暴
本文實例講述了Android編程開發之RadioGroup用法。分享給大家供大家參考,具體如下:RadioGroup 有時候比較有用.主要特征是給用戶提供多選一機制。Ma
Service是安卓四大組件之一,服務是用在後台處理事情的,並且是不可見的,該服務不是我們所說的服務器的服務,他經常用來處理一些循環操作,但是它不同於子線程,服務是運行在
我們經常會看到很多優秀的app上面都有一些很漂亮的控件,用戶體驗非常好,比如togglebutton就是一個很好的例子,IOS系統下面那個精致的togglebutton如