android开发使用SQLite之写日记

来源:互联网 发布:java jwt token 例子 编辑:程序博客网 时间:2024/05/16 10:21

使用数据库实现对数据的存储。

下面上一个小例子,写日记。

效果如下:

         


当LIstView中没有数据显示时,我们需要告诉用户没有数据.

方法有二:

1.

activity继承ListActivity,在布局文件中如下编写:

 <TextView        android:id="@id/android:empty"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="你好懒啊,还没开始写日记呢" />               <ListView       <span style="white-space:pre"></span> android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:id="@+id/android:list"/> 

2.

<span style="white-space:pre"></span>if(adapter.isEmpty()&&textView==null){textView = new TextView(MainActivity.this);textView.setText("主人很懒,什么也没留下");textView.setVisibility(View.GONE); ((ViewGroup) listView.getParent()).addView(textView); listView.setEmptyView(textView);}else{listView.setAdapter(simpleCursorAdapter);}

数据库的使用(安卓本身自带SQLite,如果想使用其他的数据库,那就得使用Web Server):

继承SQLiteOpenHelper。

public DBHelper(Context context) //数据库的名字,数据库的版本public void onCreate(SQLiteDatabase db)////创建数据库public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)//更新数据库

具体代码如下:

cn.edu.bzu.diary.activity

MainActivity.java

public class MainActivity extends Activity {ListView listView;Cursor diaries;//游标TextView textView = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = (ListView) findViewById(R.id.listview);refreshList();this.registerForContextMenu(listView);}/** * 刷新Adapter */public void refreshList(){DiaryDao diaryDao = new DiaryDao(this);diaries = diaryDao.getAllDairies();SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item, diaries, new String[] { "title","created" }, new int[] { R.id.title, R.id.created });if(simpleCursorAdapter.isEmpty()&&textView==null){textView = new TextView(MainActivity.this);textView.setText("主人很懒,什么也没留下");textView.setVisibility(View.GONE); ((ViewGroup) listView.getParent()).addView(textView); listView.setEmptyView(textView);}else{listView.setAdapter(simpleCursorAdapter);}}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {menu.setHeaderTitle("操作");menu.add(0, 1, Menu.NONE, "编辑");menu.add(0, 2, Menu.NONE, "删除");super.onCreateContextMenu(menu, v, menuInfo);}@Overridepublic boolean onContextItemSelected(MenuItem item) { // onContextItemSelectedAdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();switch (item.getItemId()) {case 1:Intent intent = new Intent();Bundle bundle = new Bundle();bundle.putInt("id", (int)menuInfo.id);intent.putExtras(bundle);intent.setClass(MainActivity.this, DiaryEditAcitivity.class);startActivity(intent);break;case 2:DiaryDao dao = new DiaryDao(MainActivity.this);dao.delete((int) menuInfo.id);//menuInfo.id与数据库的ID一致refreshList();break;}return super.onContextItemSelected(item);}/** * 在退出日记添加中,利用生命周期刷新Adapter */@Overrideprotected void onResume() {super.onResume();refreshList();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}/** * 通过菜单进入“日记添加页面” */@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.save:Intent intent = new Intent();intent.setClass(MainActivity.this, DiaryAddAcitivity.class);startActivity(intent);break;}return super.onOptionsItemSelected(item);}}


DiaryAddAcitivity.java

public class DiaryAddAcitivity extends Activity {DiaryDao diaryDao = new DiaryDao(DiaryAddAcitivity.this);Button button;EditText editText,editText2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.diaryadd_acitivity);editText = (EditText) findViewById(R.id.et_diaryadd);//标题editText2 = (EditText) findViewById(R.id.et02_diaryadd);//内容button = (Button) findViewById(R.id.but);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.diary_add_acitivity, menu);return true;}public void click(View view){String title = editText.getText().toString();String content = editText2.getText().toString();Diary diary = new Diary(title, content, Tool.dateChange(new Date()));DiaryDao diaryDao = new DiaryDao(this);diaryDao.save(diary);finish();}}

DiaryEditAcitivity.java

public class DiaryEditAcitivity extends Activity {DiaryDao diaryDao = new DiaryDao(DiaryEditAcitivity.this);Button button;EditText editText,editText2;int id ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.diaryadd_acitivity);editText = (EditText) findViewById(R.id.et_diaryadd);//标题editText2 = (EditText) findViewById(R.id.et02_diaryadd);//内容button = (Button) findViewById(R.id.but);Bundle bundle = this.getIntent().getExtras();if(bundle!=null){id = bundle.getInt("id");Diary  diary =  diaryDao.getDiaryById(id);editText.setText(diary.getTitle());editText2.setText(diary.getContent());}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.diary_add_acitivity, menu);return true;}public void click(View view){String title = editText.getText().toString();String content = editText2.getText().toString();Diary diary = new Diary(title, content, Tool.dateChange(new Date()));diary.setId(id);DiaryDao diaryDao = new DiaryDao(this);diaryDao.update(diary);finish();}}

cn.edu.bzu.diary.dao

DiaryDao.java

public class DiaryDao {private DBHelper dbHelper;private SQLiteDatabase sqLiteDatabase;public DiaryDao(Context context) {dbHelper = new DBHelper(context);}/** * 添加日记 * @param diary */public void save(Diary diary) {String sql = "insert  into diary(title,content,created) values(?,?,?)";sqLiteDatabase = dbHelper.getWritableDatabase();sqLiteDatabase.execSQL(sql,new String[] { diary.getTitle(), diary.getContent(),diary.getDatetime() });}/** * 根据id删除日记 *  * @param id *            日记的id号 */public void delete(Integer id) {sqLiteDatabase = dbHelper.getWritableDatabase();// 得到的是同一个数据库实例sqLiteDatabase.execSQL("delete from diary where _id=?",new Object[] { id });}/** * 更新日记 *  * @param diary */public void update(Diary diary) {sqLiteDatabase = dbHelper.getWritableDatabase();// 得到的是同一个数据库实例sqLiteDatabase.execSQL("update diary set title=?,content=?,created=? where _id=?",new Object[] { diary.getTitle(), diary.getContent(),diary.getDatetime(), diary.getId() });}/** * 返回一个游标,也可以使用注释部分,返回一个List集合(使用SimpleAdapter),在这里使用游标,主要是因为 * AdapterContextMenuInfo中的ID是和数据库中一致的 * @return  cursor   */public Cursor getAllDairies() {//Diary diary = null;//List<Diary> diaries = new ArrayList<Diary>();sqLiteDatabase = dbHelper.getReadableDatabase();Cursor cursor = sqLiteDatabase.rawQuery("select * from diary ", null);/* * while(cursor.moveToNext()){ String title = * cursor.getString(cursor.getColumnIndex("title")); String content = * cursor.getString(cursor.getColumnIndex("content")); String created = * cursor.getString(cursor.getColumnIndex("created")); diary = new * Diary(title, content, created); diaries.add(diary); } */return cursor;}/** * 获取记录总数 */public long count() {long count = 0;sqLiteDatabase = dbHelper.getReadableDatabase();Cursor cursor = sqLiteDatabase.rawQuery("select count(*) from diary ",null);cursor.moveToFirst();count = cursor.getLong(0);return count;}public Diary getDiaryById(int id) {sqLiteDatabase = dbHelper.getWritableDatabase();Diary diary = null;Cursor cursor = sqLiteDatabase.rawQuery("select * from diary where _id= ?", new String[] { id + "" });if (cursor.moveToFirst()) {String title = cursor.getString(cursor.getColumnIndex("title"));String content = cursor.getString(cursor.getColumnIndex("content"));String created = cursor.getString(cursor.getColumnIndex("created"));diary = new Diary(title, content, created);}return diary;}}

cn.edu.bzu.diary.db

DBHelper.java

public class DBHelper  extends SQLiteOpenHelper{public static final String DATABASE_NAME="diary.db";public static final int VERSION = 1; //数据库的名字,数据库的版本public DBHelper(Context context) {super(context, DATABASE_NAME, null, VERSION);// TODO Auto-generated constructor stub}//创建数据库,字段:id(主键),title,content,created;@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL("create table diary(_id integer primary key autoincrement,title varchar(20),content varchar(1000),created)");}//用于数据库的更新@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}

cn.edu.bzu.diary.entity

Diary.java

public class Diary {private Integer id;private String title;private String content;private String datetime;public Diary(){}public Diary(String title,String content,String datetime){this.title = title;this.content = content;this.datetime = datetime;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getDatetime() {return datetime;}public void setDatetime(String datetime) {this.datetime = datetime;}@Overridepublic String toString() {return "Diary [title=" + title + ", content=" + content + ", datetime="+ datetime + "]";}}

cn.edu.bzu.diary.tools

Tool.java
public class Tool {/** * 时间显示样式 * @param date * @return */public static String dateChange(Date date){SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh时:mm分:ss秒");return simpleDateFormat.format(date);}}

代码下载地址











0 0
原创粉丝点击