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

以下上一个小样例,写日记。

效果例如以下:

      
  

当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; @Override
protected 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);
} } @Override
public 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);
} @Override
public boolean onContextItemSelected(MenuItem item) { // onContextItemSelected
AdapterContextMenuInfo 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
*/ @Override
protected void onResume() {
super.onResume(); refreshList(); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} /**
* 通过菜单进入“日记加入页面”
*/
@Override
public 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;
@Override
protected 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); } @Override
public 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 ;
@Override
protected 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()); } } @Override
public 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。
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table diary(_id integer primary key autoincrement,title varchar(20),content varchar(1000),created)"); } //用于数据库的更新
@Override
public 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;
} @Override
public 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); } }

代码下载地址



android开发使用SQLite之写日记的更多相关文章

  1. Android 开发中 SQLite 数据库的使用

    SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, ...

  2. Android开发-之SQLite数据库

    之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...

  3. Android开发学习——SQLite数据库与单元测试

    SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper  public class Myopenhelper extends SQLiteOpenHelp ...

  4. Android 开发笔记 “Sqlite Cursor 使用”

    使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader.今天特地将它单独拿出来谈, ...

  5. Android开发--adb,SQLite数据库运用

    一.玩转adb  adb的全称为Android Debug Bridge,就是起到调试桥的作用.   adb有什么用?:借助adb工具,我们可以管理设备或手机模拟器的状态.还可以进行很多手机操作,如安 ...

  6. Android 开发笔记 “SQLite”

    SQLite 入门与分析 1.SQLite介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分.正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源, ...

  7. 从零开始学android开发-查看sqlite数据库

    C:\Users\Administrator>cd E:\ProSoft\adt-bundle-windows-x86-20140321\sdk\platform-tools

  8. Android 开发笔记 “Sqlite数据库删除”

    1.代码方式 Context.deleteDatabase(String databaseName);//删除某一数据库 2.设置里面 进入应用程序 ,然后清除数据就ok了

  9. 优秀Android开发简历都是这么写,你学会也可以进大厂

    最近收了很多程序员的简历,工作经验从1年到十几年不等.发现一个问题,工作经验范围差不多的程序员,简历看起来也差不多... 为啥程序员的简历如此统一?正好最近看到一个分享也分析了这个问题,结合我个人的一 ...

随机推荐

  1. bzoj1430: 小猴打架(prufer序列)

    1430: 小猴打架 题目:传送门 简要题意: n只互不相识的猴子打架,打架之后就两两之间连边(表示已经相互认识),只有不认识(朋友的朋友都是朋友)的两只猴子才会打架.最后所有的猴子都会连成一棵树,也 ...

  2. 常见的DNS攻击——偷(劫持)、骗(缓存投毒)、打(DDos)

    常见的DNS攻击包括: 1) 域名劫持 通过采用黑客手段控制了域名管理密码和域名管理邮箱,然后将该域名的NS纪录指向到黑客可以控制的DNS服务器,然后通过在该DNS服务器上添加相应域名纪录,从而使网民 ...

  3. 使用caffemodel模型(由mnist训练)测试单张手写数字样本

    caffe中训练和测试mnist数据集都是批处理,可以反馈识别率,但是看不到单张样本的识别效果,这里使用windows自带的画图工具手写制作0~9的测试数字,然后使用caffemodel模型识别. 1 ...

  4. 32.智能指针auto_ptr

    #include <iostream> #include <memory> #include <string> #include <vector> us ...

  5. AppManager类,管理Activity和App

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); / ...

  6. JavaScript 获取移动设备的型号

    https://joyqi.com/javascript/how-to-detect-mobile-devices-model-using-javascript.html?utm_source=too ...

  7. 【Git 四】一款不错的 Git 客户端

    平常做开发使用 git bash 进行代码提交,一直没有使用过 git 相关的客户端. 直到有次同一分支下两个日志进行代码比较时,bash 返回的结果可视化理解起来比较差. 如果更改的部分比较多,问题 ...

  8. 关于 nginx 的配置的 location

    精准匹配和普通匹配:    server{            location =/index.htm{                                       ////精准匹 ...

  9. NodeJS学习笔记 (12)网络地址解析-url(ok)

    模块概述 nodejs中,提供了url这个非常实用的模块,用来做URL的解析.在做node服务端的开发时会经常用到.使用很简单,总共只有3个方法. 正式讲解前,各位同学先把下面这个图记在心上(来自no ...

  10. HTML5按键打开摄像头和拍照

    HTML5实现按键打开摄像头和拍照 步骤: 1.创建一个打开摄像头按钮的标签.video标签.拍照的按钮标签.画布 2.实现打开摄像头的功能 3.实现拍照功能   具体实现代码: <!DOCTY ...