会挽雕弓如满月,西北望,射天狼。这篇文章主要讲述android开发使用SQLite之写日记相关的知识,希望能为你提供帮助。
使用数据库实现对数据的存储。
以下上一个小样例,写日记。
效果例如以下:
文章图片
文章图片
文章图片
文章图片
当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【android开发使用SQLite之写日记】
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"); Diarydiary =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 = "insertinto 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是和数据库中一致的 * @returncursor */ 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 DBHelperextends 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); }}
代码下载地址
推荐阅读
- App跳转系统设置界面
- android:padding 与 android:margin的差别
- ANDROID窗体管理服务实现机制和架构分析
- Unity与Android的问题
- appium自动化测试环境部署_Android
- 下载编译 Android wear 源代码,尝试制作可穿戴设备功能
- yum 时候出现Another app is currently holding the yum lock解决方法
- 浅谈APP测试经验
- Android-Gradle