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