android notepad 学习笔记

2010-10-03 00:12

android notepad 学习笔记

by wellen Liang

at 2010-10-02 16:12:00

original http://www.cnblogs.com/wellen/archive/2010/10/02/1841344.html


作者: wellen Liang 发表于 2010-10-02 16:12 原文链接 阅读: 548 评论: 1

      很久就想学习android SDK 里面自带的例子Notepad,趁着国庆休息的时间,我就学习一下吧。

      首先,我们要学习一个就是android 下的数据库的建立,我们的笔记是需要用数据库来保存数据的。这里我们就需要建立一个数据库,我们定义数据库的名字为data ,数据库里只有一张数据表,表名为:notes ,这个表有三个属性,属性名:id,title ,body 。看到这三个属性估计就知道了ID 作为每个记录的标示ID,所以作为主键;Title为一条记录的标题,body作为记录的文本主题。

     要使用数据库,android内置一个很小型的数据库 SQLite.那么我们就需要建立一个对SQLite 建立的数据库的操作的类。我们建立一个SQLDbAdapter类。定义相关的属性

     android内有一个针对SQLite的操作类SQLiteOpenHelper 类。这个类主要是用来负责对数据库创建、管理版本。

     这里我们定义了对数据库的CRUD 操作。这样我们就有了对数据库的操作的相关的操作类,代码如下所示:

 

代码
1 package com.wellen;
2
3  import android.content.ContentValues;
4  import android.content.Context;
5  import android.database.Cursor;
6 import android.database.SQLException;
7 import android.database.sqlite.SQLiteDatabase;
8 import android.database.sqlite.SQLiteOpenHelper;
9 import android.util.Log;
10
11 public class NotePadDBAdapter {
12
13 private static final String TAG = "NotesDBAdapter";
14
15 /**
16 * 数据库表的相关属性
17 */
18 public static final String KEY_TITLE ="title";
19 public static final String KEY_BODY ="body";
20 public static final String KEY_ROWID = "_id";
21
22 /**
23 * 数据库及数据表名
24 */
25 private static final String DATABASE_NAME ="data";
26 private static final String DATABASE_TABLE ="notes";
27 private static final int DATABASE_VERSION =2;
28
29 /**
30 * 创建数据库的SQL语句
31 */
32 private static final String DATABASE_CREATE ="create table notes (_id integer primary key autoincrement ," +
33 " title text not null ," +
34 " body text not null);";
35
36 private final Context mCtx;
37
38 private DatabaseHelper mDbHelper;
39 /**
40 * 数据库的操作类对象
41 */
42 private SQLiteDatabase mDb;
43
44 /**
45 * 这个类用来对数据库创建和数据库版本管理的类。
46 * @author wellen
47 *
48 */
49 private static class DatabaseHelper extends SQLiteOpenHelper{
50 DatabaseHelper(Context context){
51 super(context, DATABASE_NAME, null, DATABASE_VERSION);
52 }
53
54 /**
55 * 在这个类创建的时候调用创建数据库
56 */
57 @Override
58 public void onCreate(SQLiteDatabase db) {
59 db.execSQL(DATABASE_CREATE);
60 }
61
62 /**
63 * 数据库版本更新
64 */
65 @Override
66 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
67
68 Log.w(TAG, "Upgrading database from version"+ oldVersion + "to "+ newVersion
+", which will destroy all old data");
69
70 db.execSQL("DROP TABLE IF EXISTS notes");
71 onCreate(db);
72 }
73 }
74
75 public NotePadDBAdapter(Context ctx){
76 this.mCtx = ctx;
77 }
78
79 /**
80 * 数据库打开
81 * @return
82 * @throws SQLException
83 */
84 public NotePadDBAdapter open()throws SQLException{
85 mDbHelper = new DatabaseHelper(mCtx);
86 mDb = mDbHelper.getWritableDatabase();
87 return this;
88 }
89
90 /**
91 * 数据关闭
92 */
93 public void close(){
94 mDbHelper.close();
95 }
96
97 /**
98 * 添加一条笔记记录
99 * @param title 标题
100 * @param body 内容
101 * @return 记录的ID
102 */
103 public long createNote(String title , String body){
104 ContentValues initialValues = new ContentValues();
105 initialValues.put(KEY_TITLE, title);
106 initialValues.put(KEY_BODY, body);
107
108 return mDb.insert(DATABASE_TABLE, null, initialValues);
109 }
110
111 /**
112 * 通过记录的ID 进行删除某条记事本记录
113 * @param rowId 要删除的记录的ID
114 * @return 是否成功删除
115 */
116 public boolean deleteNote(long rowId){
117 return mDb.delete(DATABASE_TABLE, KEY_ROWID+"="+rowId, null) >0;
118 }
119
120 /**
121 * 查询所有数据库表中的记录
122 * @return
123 */
124 public Cursor fetchAllNotes(){
125 return mDb.query(DATABASE_TABLE, new String[]{KEY_ROWID , KEY_TITLE , KEY_BODY}, null, null, null, null, null);
126 }
127 /**
128 * 通过某条记录的ID查询出这个记录的所有的信息
129 * @param rowId
130 * @return
131 * @throws SQLException
132 */
133 public Cursor fetchNote(long rowId)throws SQLException{
134 Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[]{KEY_ROWID , KEY_TITLE , KEY_BODY}, KEY_ROWID+"="+rowId, null, null, null, null, null);
135
136 if(mCursor != null){
137 mCursor.moveToFirst();
138 }
139 return mCursor;
140 }
141
142 /**
143 * 通过这条记录的ID,来更新 这条 记录的相关的信息
144 * @param rowId
145 * @param title
146 * @param body
147 * @return
148 */
149 public boolean updataNote(long rowId , String title , String body){
150 ContentValues args = new ContentValues();
151 args.put(KEY_TITLE, title);
152 args.put(KEY_BODY, body);
153 return mDb.update(DATABASE_TABLE, args, KEY_ROWID+"="+rowId, null)>0;
154 }
155 }
156
157
158

这样我们就有了对数据库操作的代码的实现,下面我们有了数据库了,那么我们就需要有显示的漂亮的界面来体现我们优越性吗?(要懂得包装。)

那么我们来建立界面,首先我们在程序进入后,先是显示我们已经存在的记事本的所有的记录。那么我们建立显示记录的界面,我们在项目的res/layout 新建 notes_list.xml 文件

 

 

代码
<?xml version="1.0" encoding="utf-8"?>
<!-- XML 文件标头 -->
<!-- android 中的列式布局 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
>

<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_width
="wrap_content"
android:layout_height
="wrap_content"
android:text
="@string/no_notes"></TextView>
</LinearLayout>

我们开始显示某一条记录。新建名称为note_row代码如下:

 

代码
<?xml version="1.0" encoding="UTF-8"?>
<TextView android:id="@+id/text1"
xmlns:android
="http://schemas.android.com/apk/res/android"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"></TextView>

现在界面的设计完成了,我们就需要将它们联系起来。我们在创建项目定义的主类为NotePadList。我们将NotePadList 继承与ListActivity,并复写ListActivity的三个方法,三个方法分别为:onCreate() ,onCreateOptionsMenu(Menu menu),onOptionsItemSelected(MenuItem item).

相关的代码如下:

 

代码
package com.wellen;

import android.app.ListActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SimpleCursorAdapter;
/**
* 程序的主界面
*
@author wellen
*
*/
public class NotePadList extends ListActivity {

private static final int INSERT_ID = Menu.FIRST;

private int mNoteNumber = 1;
/**
* 数据库操作类
*/
private NotePadDBAdapter mDbHelper;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置列表布局
setContentView(R.layout.notes_list);
//初始化数据库操作类
mDbHelper = new NotePadDBAdapter(this);
//数据库打开
mDbHelper.open();
fillData();
}
/**
* 获取现在所有存储 的记录,并将 它们设置并显示到主界面上去
*/
private void fillData(){
Cursor c
= mDbHelper.fetchAllNotes();
startManagingCursor(c);

String [] from
= new String[]{ NotePadDBAdapter.KEY_TITLE };
int [] to = new int[] {R.id.text1};

SimpleCursorAdapter notes
= new SimpleCursorAdapter(this , R.layout.note_row , c, from , to);
setListAdapter(notes);
}

/**
* 当按下Menu的时候,就调用这个方法
* 这里会弹出一个Menu 插入Note
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
menu.add(
0 ,INSERT_ID , 0 , R.string.menu_insert);

return result;
}

/**
* 当这个Menu弹出的时候,选择插入 就会调用这个方法
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case INSERT_ID:
createNote();
return true;
}
return super.onOptionsItemSelected(item);
}

/**
* 添加一天记录并刷新显示列表
*/
public void createNote(){
String noteName
= "Note"+ mNoteNumber++;
mDbHelper.createNote(noteName,
"");
fillData();
}

}

 

 

这样我们就能够一个简单的显示日志和添加日志的两个功能的完成。但是我们还有要修改日志和删除日志等相关的操作没有写,这些将在下篇中去介绍。 

 

 

 

 

 

 

评论: 1 查看评论 发表评论

程序员找工作,就在博客园


最新新闻:
· 嫦娥域名抢注升温 注册者叫价八千八(2010-10-03 09:57)
· 苏宁电器称3000余台iPhone 4今天到货(2010-10-03 09:56)
· 谷歌网址缩略服务脱颖而出的4大方法(2010-10-03 09:33)
· 魅族官方首次曝M9真机清晰图和多UI界面(2010-10-03 09:32)
· Android很好很强大,iOS更强大(2010-10-03 09:32)

编辑推荐:如果你也是.NET程序员

网站导航:博客园首页  个人主页  新闻  闪存  小组  博问  社区  知识库