个人日记
来源:互联网 发布:创维25nd9000总线数据 编辑:程序博客网 时间:2024/05/16 17:29
1,创建数据库,创建表相应类:DBHelper.java继承自SQLiteOpenHelper数据库创建辅助类
DBHelper.java源码:
package cn.bzu.mydiary.DB;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper {private static final String DB_NAME="mydiary.db";//数据库名称private static final int DB_VERSION=1;//数据库版本public DBHelper(Context context) {//上下文super(context, DB_NAME, null, DB_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {//建表_id为主键并为自动增长String sql="create table diary(_id integer primary key autoincrement,title varchar(20),content varchar(1000),createtime)";db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}
2.编写日记实体类Diary.java字段与数据库对应
Diary.java源码:
package cn.bzu.mydiary.entity;public class Diary {private Integer id;private String title;private String content;private String createtime;public Diary() {super();}public Diary(String title, String content, String createtime) {super();this.title = title;this.content = content;this.createtime = createtime;}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;}public Diary(Integer id, String title, String content, String createtime) {this.id = id;this.title = title;this.content = content;this.createtime = createtime;}}
3.编写数据库操作类DBDao.java,实现对日记的插入,删除,更新,获取所有的日记,通过主键id来获取日记,实现数据库的计数
package cn.bzu.mydiary.Dao;import java.util.ArrayList;import java.util.List;import java.lang.*;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.UrlQuerySanitizer.ValueSanitizer;import cn.bzu.mydiary.DB.DBHelper;import cn.bzu.mydiary.entity.Diary;public class DBDao {//DBHelper类的变量private DBHelper dbHelper;//传上下文,由Activity传值public DBDao(Context context) {dbHelper = new DBHelper(context);}//save保存日记public void save(Diary diary) {SQLiteDatabase db=dbHelper.getWritableDatabase();/*ContentValues values=new ContentValues();values.put("title", diary.getTitle());values.put("content", diary.getContent());values.put("createtime", diary.getCreatetime());*///?为占位符String sql="insert into diary(title,content,createtime)values(?,?,?)";//两个参数,第二个参数Object[]类型的数组,设置数据值db.execSQL(sql, new String[]{diary.getTitle(),diary.getContent(),diary.getCreatetime()});//db.insert("diary", null, values);}//删除日记public void deleteDiary(Integer id) {SQLiteDatabase db=dbHelper.getWritableDatabase();//db.delete("diary", "_id=?", new String[]{id.toString()});String sql="delete from diary where _id=?";db.execSQL(sql,new Object[]{id});}//通过id获取日记public Diary getDiaryById(Integer id) {Diary diary=null;SQLiteDatabase db=dbHelper.getReadableDatabase(); //Cursor cursor=db.query("diary", null, null, null, null, "_id=?", null);String sql="select * from diary where _id=?";Cursor cursor=db.rawQuery(sql,new String[]{id.toString()});if(cursor.moveToFirst()){Integer _id=cursor.getInt(cursor.getColumnIndex("_id"));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;}//更新日记public void updateDiary(Diary diary) {SQLiteDatabase db=dbHelper.getWritableDatabase();String sql="update diary set title=?,content=?,createtime=? where _id=?";db.execSQL(sql, new Object[]{diary.getTitle(),diary.getContent(),diary.getCreatetime(),diary.getId()});/*ContentValues values=new ContentValues();values.put("title", diary.getTitle());values.put("content", diary.getContent());values.put("createtime", diary.getCreatetime());db.update("diary", values, "_id=?", new String[]{diary.getId().toString()});*/}//计数日记public int count(Diary diary) { int count=0;SQLiteDatabase db=dbHelper.getReadableDatabase(); //Cursor cursor=db.query("diary", new String[]{"count(*)"}, null, null, null, null, null);String sql="select count(*) from diary";Cursor cursor=db.rawQuery(sql,null);cursor.moveToFirst();count=cursor.getInt(0);cursor.close();return count;}//获取所有的日记,返回类型List集合public List<Diary> getAllDiarys() {List<Diary> diarys=new ArrayList<Diary>();//数据库SQLiteDatabase db=dbHelper.getReadableDatabase();String sql="select * from diary";//返回游标,游标指向第一个的前一个位置 //Cursor cursor=db.query("diary", null,null, null, null, null, null);Cursor cursor=db.rawQuery(sql, null);//游标要下移,展示每一条记录while(cursor.moveToNext()){Integer id=cursor.getInt(cursor.getColumnIndex("_id"));String title=cursor.getString(cursor.getColumnIndex("title"));String content=cursor.getString(cursor.getColumnIndex("content"));String createtime=cursor.getString(cursor.getColumnIndex("createtime"));//创建Diary的实例Diary diary=new Diary(id, title, content, createtime);diarys.add(diary);}return diarys;}}
4.获取当前时间单独抽出类DateTool.java来实现
package cn.bzu.mydiary.tools;import java.text.SimpleDateFormat;import java.util.Date;public class DateTool {public static String getCurrentTime(){SimpleDateFormat formatter=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");return formatter.format(new Date());}}
5.界面设计,首先进入欢迎界面WelcomeActivity.java,延迟一段时间进入主Activity
package cn.bzu.mydiary;import android.os.Bundle;import android.os.Handler;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.view.animation.AlphaAnimation;import android.widget.ImageView;import android.widget.ProgressBar;public class WelcomeActivity extends Activity {private ImageView imageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_welcome);imageView=(ImageView) this.findViewById(R.id.im_welcome);// 创建了一个淡入效果的Animation对象AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f);animation.setDuration(1000);animation.setStartOffset(500);imageView.startAnimation(animation);new Handler().postDelayed(new Runnable(){// 新建一个handler实现演示跳转public void run(){Intent intent = new Intent();intent.setClass(WelcomeActivity.this, MainActivity.class);startActivity(intent);}}, 3000);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.welcome, menu);return true;}}
6.进行MainActivity的布局activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@drawable/back" tools:context=".MainActivity" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" ></ListView> <TextView android:id="@+id/emptyshow" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="你好懒啊,还没开始写日记呢"/> </LinearLayout>
7.对列表的每一项的内容进行布局item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <TextView android:id="@+id/title" android:layout_height="wrap_content" android:layout_width="200dip" android:textColor="#0000ff" android:textSize="20sp"/> <TextView android:id="@+id/createtime" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#0000ff" android:textSize="20sp"/> </LinearLayout>
8.点击MainActitvity的menu实现添加日记的功能布局文件main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/diary_add" android:icon="@android:drawable/ic_menu_add" android:title="@string/diary_add" /> </menu>
9.添加日记的布局文件activity_new_diary.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/newdiary" tools:context=".New_Diary" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#87cefa" android:text="日记标题" /> <EditText android:id="@+id/t" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ems="10" > </EditText> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#87cefa" android:text="日记内容" /> <EditText android:gravity="top" android:id="@+id/c" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/confirm" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="确定"/></LinearLayout>
10.添加日记实现New_Diary.java源码:
package cn.bzu.mydiary;import cn.bzu.mydiary.Dao.DBDao;import cn.bzu.mydiary.entity.Diary;import cn.bzu.mydiary.tools.DateTool;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.EditText;public class New_Diary extends Activity {private EditText titleText;private EditText contentText;private Button confirm;private DBDao dbDao; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_new__diary);dbDao=new DBDao(this);//获取组件titleText=(EditText) this.findViewById(R.id.t);contentText=(EditText) this.findViewById(R.id.c);confirm=(Button) this.findViewById(R.id.confirm);confirm.setOnClickListener(new Button.OnClickListener() {@Override/** * 点击确定按钮时,把用户输入的标题,内容,和获取的当前时间添加到数据库中 */public void onClick(View v) {String title=titleText.getText().toString();String content=contentText.getText().toString();Diary diary=new Diary(title, content, DateTool.getCurrentTime());dbDao.save(diary);//添加完毕,跳转到MainActivity中,查看数据是否添加成功Intent intent=new Intent();intent.setClass(New_Diary.this, MainActivity.class);startActivity(intent);finish();}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.new__diary, menu);return true;}}
11.MainActivity.java源码:
package cn.bzu.mydiary;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import cn.bzu.mydiary.Dao.DBDao;import cn.bzu.mydiary.entity.Diary;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;public class MainActivity extends Activity { private DBDao dbDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbDao=new DBDao(this);//new DBDao的实例 List<Diary> diaries=dbDao.getAllDiarys();//获取所有 的日记 ListView listView=(ListView) this.findViewById(R.id.listview);//获取组件 //列表为空时 TextView emptyshow=(TextView) this.findViewById(R.id.emptyshow); listView.setEmptyView(emptyshow);//为空时显示TextView的内容,参数为(View,emptyView) //提供适配器对象 List<Map<String,Object>> data=new ArrayList<Map<String,Object>>(); for(Diary diary:diaries){ Map<String,Object> map=new HashMap<String,Object>(); map.put("title", diary.getTitle()); map.put("createtime", diary.getCreatetime()); map.put("content", diary.getContent()); map.put("id", diary.getId()); //加入map集合 data.add(map); } SimpleAdapter simpleAdapter=new SimpleAdapter(this, data, R.layout.item, new String[]{"title","createtime"}, new int[]{R.id.title,R.id.createtime}); listView.setAdapter(simpleAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {ListView listView=(ListView) parent;Map<String,Object> item=(Map<String, Object>) listView.getItemAtPosition(position);String title=(String) item.get("title");String createtime=(String) item.get("createtime");Integer _id=(Integer) item.get("id");String content=(String) item.get("content"); //点击每一行跳转到ContentActivity显示所对应日记的标题和内容Intent intent=new Intent();intent.setClass(MainActivity.this, ContentActivity.class);Bundle bundle=new Bundle();//bundle传值。放数据bundle.putString("title", title);bundle.putString("content", content);bundle.putInt("id", _id);intent.putExtras(bundle);startActivity(intent);finish();//Toast.makeText(MainActivity.this, title+createtime, Toast.LENGTH_LONG).show();}}); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId()==R.id.diary_add){ Intent intent=new Intent(); intent.setClass(MainActivity.this, New_Diary.class); startActivity(intent); finish(); } return super.onOptionsItemSelected(item); } }
12.显示标题和内容的布局文件activity_content.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/bg" android:orientation="vertical" tools:context=".ContentActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#87cefa" android:text="日记标题" /> <EditText android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ems="10" > </EditText> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#87cefa" android:text="日记内容" /> <EditText android:gravity="top" android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" /></LinearLayout>
13.点击显示标题和内容的menu进行编辑和删除操作,布局文件content.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/diary_edit" android:icon="@android:drawable/ic_menu_edit" android:title="@string/diary_edit" /> <item android:id="@+id/diary_delete" android:icon="@android:drawable/ic_menu_delete" android:title="@string/diary_delete" /> </menu>
14.
显示标题和内容的ContentActivity.java源码:
package cn.bzu.mydiary;import cn.bzu.mydiary.Dao.DBDao;import cn.bzu.mydiary.entity.Diary;import android.os.Bundle;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.content.Intent;import android.view.Menu;import android.view.MenuItem;import android.widget.EditText;public class ContentActivity extends Activity {private EditText title;private EditText content;private DBDao dbDao;private int id;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_content);dbDao=new DBDao(this);//获取组件title = (EditText) this.findViewById(R.id.title);content=(EditText) this.findViewById(R.id.content);Bundle b = getIntent().getExtras();//b接收intent传来的值if (b != null) {String text = b.getString("title");String text1=b.getString("content");id=b.getInt("id");title.setText(text);//获取的内容显示到相应的编辑框中content.setText(text1);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.content, menu);return true;} @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId()==R.id.diary_edit){//点击编辑时跳转到Edit_Diary Intent intent=new Intent(); Diary diary=dbDao.getDiaryById(id);//通过id获取日记 intent.putExtra("id", diary.getId());//把id再传值到Edit_Diary中 intent.setClass(ContentActivity.this, Edit_Diary.class); startActivity(intent); finish(); } if(item.getItemId()==R.id.diary_delete){//点击删除时,弹出对话框 dialog(); } return super.onOptionsItemSelected(item); } /**。 * 对话框进行友好提示 */ public void dialog(){ AlertDialog.Builder builder = new Builder(ContentActivity.this); builder.setMessage("确认删除吗?"); builder.setTitle("提示"); builder.setPositiveButton("确认", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DBDao dbDao=new DBDao(ContentActivity.this); dbDao.deleteDiary(id);//确认删除时,删除显示的日记 title.setText("");//把标题和内容显示的设为空 content.setText(""); Intent intent=new Intent(); intent.setClass(ContentActivity.this, MainActivity.class);//跳转MainActivity查看是否删除了日记 startActivity(intent); finish(); } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.create().show(); } }
15.编辑日记日记的布局文件activitity_edit_diary.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" tools:context=".Edit_Diary" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#87cefa" android:text="日记标题" /> <EditText android:id="@+id/ti" android:layout_width="fill_parent" android:layout_height="wrap_content" android:ems="10" > </EditText> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#87cefa" android:text="日记内容" /> <EditText android:gravity="top" android:id="@+id/co" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/conf" android:onClick="update" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="提交日记"/></LinearLayout>
16.编辑日记Edit_Diary.java源码:
package cn.bzu.mydiary;import cn.bzu.mydiary.Dao.DBDao;import cn.bzu.mydiary.entity.Diary;import cn.bzu.mydiary.tools.DateTool;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.EditText;public class Edit_Diary extends Activity {private EditText ti;private EditText co;private DBDao dbDao;int id;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_edit__diary);id=getIntent().getIntExtra("id", 0);//获取传来的id的值if(id!=0){dbDao=new DBDao(this);Diary diary=dbDao.getDiaryById((int)id);//查找组件ti=(EditText) this.findViewById(R.id.ti); co=(EditText) this.findViewById(R.id.co); ti.setText(diary.getTitle());co.setText(diary.getContent());}} public void update(View v) {String title=ti.getText().toString();String content=co.getText().toString();Diary diary=new Diary(title,content,DateTool.getCurrentTime());diary.setId(id);dbDao.updateDiary(diary);//更新日记//更新完后,再次跳转到主Activity查看是否更新Intent intent=new Intent();intent.setClass(Edit_Diary.this, MainActivity.class);startActivity(intent);finish();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.edit__diary, menu);return true;}}
17.运行效果图:
欢迎页面:
2.添加效果图:
3.删除效果图:
4.编辑效果图:
- 个人日记
- 个人日记
- 个人日记
- 个人日记
- 个人日记
- 个人日记
- 个人日记
- 个人日记
- 个人日记
- 个人日记
- 个人日记
- 个人日记
- 【个人日记】
- 个人日记
- 个人日记
- [个人日记]心情好糟糕
- 个人日记:编程起步。
- 2010.10上旬 个人日记
- 【WPS快速调整从网上复制的零乱文字】
- 学习Cocos2D-x之路(2)--学习第一个例子
- mfs 分布式文件系统
- SSI开发:spring-pool.xml标准配置模板
- 策略模式
- 个人日记
- 【C# 相关】
- i2c_client,i2c_adapter和I2C-core的简介
- FT5406触摸屏驱动
- 详析mysql隐藏空间
- webservice
- 中国国际软件博览会见闻
- css中id和class的区别
- 连接数据库操作