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

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

效果如下:

         

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

方法有二:

1.

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

 <TextViewandroid: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);}}

代码下载地址

android开发使用SQLite之写日记相关推荐

  1. 8年Android开发教你如何写简历,写给正在求职的安卓开发

    进大厂本来就很难了,不过做足了准备,你会发现很多问题都迎刃而解了,当然有时候运气也占了一部分,除了运气以外,当然与我自身的努力也是分不开的.运气也是实力的一部分,毕竟天助自助者~ 每次到年底做总结的时 ...

  2. 作为一名优秀的Android 开发,该如何写好自己的简历,android面试算法题

    2.性能上面带来了多少提升,如编译速度的提升,提升了多少,降低了多少 min等 3.你在这个项目作出了什么成绩,比如主导搭建了代码扫描框架,自动扫描,提高代码质量,减少 review 成本. 千里马常 ...

  3. 2020最新中高阶Android面试题总结-下(附解题思路),8年Android开发教你如何写简历

    通过startService()这种方式启动的service,生命周期是这样:调用startService() --> onCreate()–> onStartConmon()–> ...

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

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

  5. Android开发环境简单配置

    为什么80%的码农都做不了架构师?>>>    ·         Android开发环境简单配置 写这个系列的原因也是因为自己对android比较感兴趣,而网上多数教程都是直接参照 ...

  6. Android开发从零开始(1)--2016.01.18

    Android开发从零开始 原来在大学的时候学习过安卓开发,记得当时是跟着传智播客黑马java班看完了整个android开发的部分,写了一两个小程序,后来还做了本科的毕业设计,用的就是android, ...

  7. sqlite数据库android使用教程,Android开发教程之 SQLite数据库的使用

    在开发Android应用程序时经常需要存储数据,Android系统提供了SQLite数据库,还提供了SQLiteOpenHelper类,使我们可以很方便的操作数据库.通过一个例子来说明在Android ...

  8. Android开发笔记(序)写在前面的目录

    知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入 ...

  9. Android开发笔记(序)写在前面的目录大全

    转自  湖前琴亭 的博客https://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面 ...

最新文章

  1. 无法读取配置节“oracle.manageddataaccess.client”,因为它缺少节声明
  2. 根据ip获得国家,省,城市,运营商
  3. java父类shape_java父类为抽象类,子类构造方法传参
  4. checkbox保存和赋值
  5. java dfs算法蓝桥杯题_【蓝桥杯省赛JavaB组真题详解】四平方和(2016)_疼疼蛇的博客-CSDN博客...
  6. 图书馆数字化库存管理_将公共领域中的任何图书数字化
  7. java nextline_Java写一个学生管理系统
  8. boot入门思想 spring_(第一讲)Spring Initializr-快速入门Spring Boot的最好选择
  9. 相对位置的渐变 html,沿HTML5画布路径的连续渐变
  10. linux中搭建java开发环境
  11. ueditor富文本
  12. 游戏制作大师RPGMAKER MV/MZ安装DLC的方法
  13. WARNING: The repository located at mirrors.aliyun.com is not a trusted or secure host and is being i
  14. php无法访问_php网站无法访问可能是什么原因
  15. matlab用雅可比(Jacobi)迭代法求解方程组
  16. 抖音获客源码,短视频获客系统,获客SaaS有标准答案吗?
  17. python使用xlwt模块操作Excel
  18. 无人船成渡过大西洋将来发展又会如何?
  19. Element-UI(一) 表格table中实现“加载更多”的功能
  20. 分布式Ruby解决之道

热门文章

  1. opencv HSV色彩空间 追踪特定颜色
  2. MBUS主机端简化版电路设计
  3. 5 Fast unfolding of communities in large networks
  4. 基于jquery上的轻量级《数据模板解析》插件
  5. CTF-加密与解密(二十一)
  6. SCU2016-05 J题构造
  7. BUAA小型图书管理系统
  8. cesium着色器学习系列3-着色器方式绘制图元
  9. 基于Spark GraphX 的图形数据分析
  10. bat脚本之“一键删除指定的文件夹和文件”