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);}}
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.javapublic 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.javapublic 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.javapublic 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
- android开发使用SQLite之写日记
- android 开发之路-------SQLite 基础使用
- Android开发之Sqlite的使用
- android开发之使用SQLite数据库存储
- Android开发之Sqlite的使用(二)
- Android 开发之SQLITE 数据库的使用
- android开发之使用SQLite数据库存储
- ANDROID 开发之 SQLite
- Android开发之SQLite
- Android开发之sqlite
- Android开发入门之在SQLite中使用事务
- Android 开发包之如何使用SQLite 数据库?
- android开发之使用SQLite数据库(db文件)
- Android开发存储方式详解之SQLite使用实例
- Android应用开发技巧之更方便的使用Sqlite
- Android开发基础之SQLite数据库 单元测试的使用
- Android开发之Sqlite数据库
- ANDROID开发之SQLite详解
- 【Leetcode】Pascal's Triangle II (Pascal)
- App列表之圆角ListView
- 学习流水账:MyBatis -- helloworld,动态SQL
- 彳亍
- 4.6、Libgdx线程介绍
- android开发使用SQLite之写日记
- 在python下安装app一般有几种方法:
- 支付宝的性能测试
- Android主题和样式之系统篇(下)
- 容量规划概述
- Codeforces gym 2013-2014 Samara SAU ACM ICPC Quarterfinal Qualification Contest
- 不是我想要的吗hbgnhk
- Learn By Doing & 随笔
- 大型网站负载均衡解决方法