个人日记

来源:互联网 发布:创维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.编辑效果图:


 

原创粉丝点击