1.创建DBOpenHelper类,用于数据库的创建以及更新
public class DBOpenHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "diary.db";
private static final int DB_VERSION = 1;
public DBOpenHelper(Context context) {
// 第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,如果设置为null,代表使用系统默认的工厂类
// 从数据库中查询出来的结果是需要通过这个游标进行访问的
super(context, DB_NAME, null, DB_VERSION);
}
/**
* 数据库第一次被创建出来的时候才会被调用,只会调用1次 完成数据库中表的创建 SQLiteDatabase类主要是为了操作数据库的
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table diary(_id integer primary key autoincrement,title varchar(20),content varchar(1000),createtime)");
}
/**
* 数据库的版本发生改变的时候,一般是在软件升级的时候会调用
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
2.创建日记实体类
public class Diary {
private Integer id;
private String title;
private String content;
private String createtime;
public Diary(String title, String content, String createtime) {
super();
this.title = title;
this.content = content;
this.createtime = createtime;
}
public Diary() {
super();
}
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 getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
@Override
public String toString() {
return "Diary [id=" + id + ", title=" + title + ", content=" + content
+ ", createtime=" + createtime + "]";
}
3.创建dao层,用于CRUD操作
/**
* 根据id查找日记
* @param id
* @return
*/
public Diary getDiaryById(Integer id){
Diary diary=null;
db=dbOpenHelper.getReadableDatabase();
Cursor cursor=db.query("diary", null, "_id=?", new String[]{id.toString()},null, null, null);
if(cursor!=null){
if(cursor.moveToFirst()){
String title=cursor.getString(cursor.getColumnIndex("title"));
String content=cursor.getString(cursor.getColumnIndex("content"));
String createtime=cursor.getString(cursor.getColumnIndex("createtime"));
diary=new Diary(title,content,createtime);
diary.setId(id);
}
}
return diary;
}
/**
* 根据id删除日记
* @param id
*/
public void delete(Integer id){
db=dbOpenHelper.getWritableDatabase();
db.delete("diary", "_id=?", new String[]{id.toString()});
}
/**
* 计算日记数量
* @return
*/
public long count(){
long count=0;
db=dbOpenHelper.getReadableDatabase();
Cursor cursor=db.query("diary", new String[]{"count(*)"}, null, null, null, null, null);
if(cursor.moveToFirst()){
count=cursor.getLong(0);
}
return count;
}
public String getCurrentTime() {
SimpleDateFormat format = new SimpleDateFormat(
"yyyy年MM月dd日 hh:mm:ss");
String date = format.format(new Date());
return date;
}
4.程序主界面(采用选项卡的方式)
TabHost tabHost = getTabHost();
Resources r = getResources();
LayoutInflater.from(this).inflate(R.layout.activity_main,
tabHost.getTabContentView(), true);
TabHost.TabSpec tab1 = tabHost.newTabSpec("tab01")
.setIndicator("新建日记")
.setContent(new Intent(this,Diary_New.class));
TabHost.TabSpec tab2 = tabHost.newTabSpec("tab02")
.setIndicator("查看日志")
.setContent(new Intent(this,Diary_List.class));
tabHost.addTab(tab1);
tabHost.addTab(tab2);
}
5.日记列表界面(调用生命周期实现切换更新)
java代码:
private ListView listView;
private TextView textView;
private DiaryDao diaryDao;
private List<Map<String, Object>> data;
private int id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diary__list);
diaryDao=new DiaryDao(Diary_List.this);
listView=(ListView) findViewById(R.id.listview);
textView=(TextView) findViewById(R.id.empty);
listView.setEmptyView(textView);
prepareData();
//实现单击查看日记功能
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
Map<String,Object> item=data.get(position);
String concent=(String) item.get("concent");
String title=(String) item.get("title");
Intent intent = new Intent();
intent.setClass(Diary_List.this, Diary_Show.class);
Bundle bundle = new Bundle();
bundle.putString("title",title );
bundle.putString("concent", concent);
intent.putExtras(bundle);
startActivity(intent);
}
});
//实现长按编辑删除
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
Map<String,Object> item=data.get(position);
String title=(String) item.get("title");
System.out.println(title);
id=(Integer) item.get("id");
System.out.println("id="+id);
System.out.println("位置="+arg3);
AlertDialog.Builder builder=new Builder(Diary_List.this);
builder.setTitle("修改删除");
builder.setNegativeButton("修改", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(Diary_List.this, Diary_Edit.class);
Bundle bundle = new Bundle();
bundle.putInt("id", id);
intent.putExtras(bundle);
startActivity(intent);
}
});
builder.setPositiveButton("删除", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
diaryDao.delete(id);
prepareData();
}
});
builder.show();
return true;
}
});
}
public void prepareData() {
data = new ArrayList<Map<String, Object>>();
diaryDao = new DiaryDao(this);
List<Diary> diaries = diaryDao.getAllDiaries();
for (Diary diary : diaries) {
Map<String, Object> item = new HashMap<String, Object>();
item.put("title", diary.getTitle());
item.put("createtime", diary.getCreatetime());
item.put("id", diary.getId());
item.put("concent",diary.getContent());
data.add(item);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(this, data,
R.layout.diary_list_item, new String[] { "title", "createtime" },
new int[] { R.id.title, R.id.createtime });
listView.setAdapter(simpleAdapter);
}
public void onRestart(){
super.onRestart();
prepareData();
}
public void onResume() {
super.onResume();
prepareData();
}
生命周期调用
public void onRestart(){
super.onRestart();
prepareData();
}
public void onResume() {
super.onResume();
prepareData();
}
6.新建日记
private EditText title,content;
private DiaryDao diaryDao;
private Diary diary;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diary__new);
title=(EditText) findViewById(R.id.title);
content=(EditText) findViewById(R.id.content);
}
public void addDiary(View v) {
String t=title.getText().toString();
String c=content.getText().toString();
diaryDao=new DiaryDao(Diary_New.this);
diary=new Diary(t,c,diaryDao.getCurrentTime());
diaryDao.save(diary);
title.setText("");
content.setText("");
Toast.makeText(Diary_New.this,"添加日记成功", Toast.LENGTH_SHORT).show();
}
7.编辑日记
public class Diary_Edit extends Activity {
private EditText EDtitle,EDcontent;
private DiaryDao diaryDao;
private Diary diary_old,diary_new;
private String createtime;
private int id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diary__edit);
//获取控件
EDtitle=(EditText) findViewById(R.id.edtitle);
EDcontent=(EditText) findViewById(R.id.edcontent);
//接收来自日记列表是数据
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
id=bundle.getInt("id");
diary_old=new Diary();
diaryDao=new DiaryDao(Diary_Edit.this);
diary_old=diaryDao.getDiaryById(id);
System.out.println(diary_old);
String title=diary_old.getTitle();
String content=diary_old.getContent();
createtime=diary_old.getCreatetime();
EDtitle.setText(title);
EDcontent.setText(content);
}
public void editDiary(View v) {
diaryDao=new DiaryDao(Diary_Edit.this);
String title_new=EDtitle.getText().toString();
String content_new=EDcontent.getText().toString();
diary_new=new Diary(title_new,content_new,createtime);
diary_new.setId(id);
diaryDao.update(diary_new);
Toast.makeText(Diary_Edit.this, "修改成功", Toast.LENGTH_LONG).show();
this.finish();
}
8.单击查看日记
public class Diary_Show extends Activity {
private TextView title,concent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diary__show);
title=(TextView) findViewById(R.id.swtitle);
concent=(TextView) findViewById(R.id.swcontent);
Intent intent=getIntent();
Bundle bundle=intent.getExtras();
String title1=bundle.getString("title");
String concent1=bundle.getString("concent");
System.out.println(title1);
System.out.println(concent1);
title.setText(title1);
concent.setText(concent1);
}
0.关于栈的问题
日记本主界面一直位于栈底,每次操作都要压栈,所以每次操作(查看、修改)之后都要出栈(finish掉当前activity),而不仅仅是完成对主界面的跳转。由于主界面一直位于栈底,所以完成操作之后只需finish()当前activity即可。