个人日记本的实现

实现个人日记本的效果如下,如果点击进入可以对原日记进行修改,点击菜单可以添加或者删除一篇日记:


首先,先创建日记实体类,代码如下:

package com.example.mydiary.entity;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日记实体类
 * 
 * @author 刘玲琳
 * 
 */
public class Diary {
	private Integer id;// 日记编号
	private String title;// 日记标题
	private String content;// 日记内容
	private String 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() {
		SimpleDateFormat format = new SimpleDateFormat(
				"yyyy年MM月dd日 hh时:mm分:ss秒");
		String datetime = format.format(new Date());
		return datetime;
	}

	public void setDatatime(String datetime) {
		this.datetime = datetime;
	}

	public Diary(String title, String content, String datetime) {
		super();
		this.title = title;
		this.content = content;
		this.datetime = datetime;
	}

	public Diary(String title, String content, String datetime,Integer id) {
		super();
		this.id = id;
		this.title = title;
		this.content = content;
		this.datetime = datetime;
	}

	public Diary() {
		
	}
}
其次,创建数据库辅助类,代码如下:

package com.example.mydiary.service;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 数据库辅助类
 * 
 * @author 刘玲琳
 * 
 */
public class DBOpenHelper extends SQLiteOpenHelper {
	public static final String DATABASE_NAME = "mydiary.db";// 数据库的名称
	public static final int DATABASE_VERSION = 1;

	// 父类没有提供默认构造器
	public DBOpenHelper(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);// 第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类
																// 如果设置为null,代表使用系统默认的工厂类。从数据库中查询出来的结果是需要通过这个游标进行访问的
	}

	/*
	 * 数据库第一次被创建出来的时候才会被调用,只会调用一次 完成数据库中表的创建SQLiteDatabase类主要是为了操作数据库的
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		String sql = "create table mydiary(_id integer primary key autoincrement,title varchar(20),content varchar(1000),datetime)";
		db.execSQL(sql);
	}

	/*
	 * 数据库的版本发生改变的时候,一般是在软件升级的时候会调用
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

	}

}
第三,创建日记操作类,代码如下:

package com.example.mydiary.service;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.mydiary.entity.Diary;

public class DiaryService {
	private DBOpenHelper dbOpenHelper;
	private SQLiteDatabase sqLiteDatabase;

	public DiaryService(Context context) {
		dbOpenHelper = new DBOpenHelper(context);
	}

	/*
	 * 保存日记
	 */
	public void save(Diary diary) {
		System.out.println("title:"+diary.getTitle());
		System.out.println("content:"+diary.getContent());
		// 如果要对数据进行更改,就调用此方法,以读写的方式打开数据库
		sqLiteDatabase = dbOpenHelper.getWritableDatabase();
		String sql = "insert into mydiary(title,content,datetime)values(?,?,?)";
		sqLiteDatabase.execSQL(
				sql,
				new String[] { diary.getTitle(), diary.getContent(),
						diary.getDatetime() });
		System.out.println("datetime:"+new Diary().getDatetime());
	}

	/*
	 * 根据id删除日记
	 */
	public void delete(Integer id) {
		// 得到同一个数据库实例
		sqLiteDatabase = dbOpenHelper.getWritableDatabase();
		String sql = "delete from mydiary where _id=?";
		sqLiteDatabase.execSQL(sql, new Object[] { id });
	}

	/*
	 * 更新日记
	 */
	public void update(Diary diary) {
		System.out.println("title:"+diary.getTitle());
		System.out.println("content:"+diary.getContent());
		// 得到同一个数据库实例
		sqLiteDatabase = dbOpenHelper.getWritableDatabase();
		String sql = "update mydiary set title=?,content=?,datetime=? where _id=?";
		sqLiteDatabase.execSQL(
				sql,
				new Object[] { diary.getTitle(), diary.getContent(),
						new Diary().getDatetime(), diary.getId() });
		System.out.println("datetime:"+new Diary().getDatetime());
	}

	/*
	 * 根据id查找日记
	 */
	public Diary find(Integer id) {
		Diary diary = null;
		sqLiteDatabase = dbOpenHelper.getReadableDatabase();
		String sql = "select * from mydiary where _id=?";
		// 得到游标,最多只有一条数据
		Cursor cursor = sqLiteDatabase.rawQuery(sql,
				new String[] { id.toString() });
		// 如果移动成功就代表存在
		if (cursor.moveToNext()) {
			// 只能根据列的索引来获得字段值
			String title = cursor.getString(cursor.getColumnIndex("title"));
			String content = cursor.getString(cursor.getColumnIndex("content"));
			String datetime = cursor.getString(cursor
					.getColumnIndex("datetime"));
			diary = new Diary(title, content, datetime);
		}
		cursor.close();
		return diary;
	}

	/*
	 * 分页查询
	 */

	public List<Diary> getDiariesByPage(Integer offset, Integer maxResult) {
		Diary diary=null;
		List<Diary> diaries = new ArrayList<Diary>();
		sqLiteDatabase=dbOpenHelper.getReadableDatabase();
		String sql="select * from mydiary limit ?,?";
		// 得到游标,最多只有一条数据
		Cursor cursor=sqLiteDatabase.rawQuery(sql, new String[]{offset.toString(),maxResult.toString()});
		// 如果移动成功就代表存在
		if(cursor.moveToNext()){
			String title=cursor.getString(cursor.getColumnIndex("title"));
			String content=cursor.getString(cursor.getColumnIndex("content"));
			String datetime=cursor.getString(cursor.getColumnIndex("datetime"));
			diary=new Diary(title, content, datetime);
			diaries.add(diary);
		}
		return diaries;
	}

	/*
	 * 得到所有的日记
	 */
	public List<Diary> getAllDairies() {
		Diary diary=null;
		List<Diary> diaries = new ArrayList<Diary>();
		sqLiteDatabase=dbOpenHelper.getReadableDatabase();
		String sql="select * from mydiary";
		// 得到游标,最多只有一条数据
		Cursor cursor=sqLiteDatabase.rawQuery(sql, null);
		// 如果移动成功就代表存在
		while(cursor.moveToNext()){
			String title=cursor.getString(cursor.getColumnIndex("title"));
			String content=cursor.getString(cursor.getColumnIndex("content"));
			String datetime=cursor.getString(cursor.getColumnIndex("datetime"));
			diary=new Diary(title, content, datetime);
			diary.setId(Integer.parseInt(cursor.getString(0)));
			diaries.add(diary);
		}
		cursor.close();
		return diaries;
	}

	/*
	 * 获取记录总数
	 */
	public long count() {
		long count=0;
		sqLiteDatabase=dbOpenHelper.getReadableDatabase();
		String sql="select count(*) from mydiary";
		Cursor cursor=sqLiteDatabase.rawQuery(sql, null);
		cursor.moveToFirst();
		count=cursor.getLong(0);
		cursor.close();
		return count;
	}

}
第四,创建单元测试类,测试日记操作类是否正确,代码如下:

package com.example.mydiary.test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import com.example.mydiary.entity.Diary;
import com.example.mydiary.service.DBOpenHelper;
import com.example.mydiary.service.DiaryService;

import android.test.AndroidTestCase;

/**
 * 单元测试类
 * 
 * @author 刘玲琳
 * 
 */
public class DiaryServiceTest extends AndroidTestCase {
	/*
	 *  创建数据库
	 */
	public void testCreateDB() {
		DBOpenHelper dbOpenHelper = new DBOpenHelper(getContext());
		dbOpenHelper.getWritableDatabase();// 第一次调用该方法,会帮我们自动创建出数据库
	}

	/*
	 *  保存日记
	 */
	public void testSave() {
		DiaryService diaryService = new DiaryService(getContext());
		Diary diary1 = new Diary("jason", "He sings so great!", getCurrentTime());
		Diary diary2 = new Diary("nana", "She says so great!", getCurrentTime());
		Diary diary3 = new Diary("hito", "he ays so bad!", getCurrentTime());
		Diary diary4 = new Diary("hejiong", "he says so good!", getCurrentTime());
		Diary diary5 = new Diary("weijia", "he sings so bad!", getCurrentTime());
		diaryService.save(diary1);
		diaryService.save(diary2);
		diaryService.save(diary3);
		diaryService.save(diary4);
		diaryService.save(diary5);
	}

	public String getCurrentTime() {
		SimpleDateFormat format = new SimpleDateFormat(
				"yyyy年MM月dd日 hh时:mm分:ss秒");
		String data = format.format(new Date());
		return data;
	}
	/*
	 *  删除日记
	 */
	public void testDelete(){
		DiaryService diaryService=new DiaryService(getContext());
		diaryService.delete(1);
	}
	/*
	 *  更新日记
	 */
	public void testUpdate(){
		DiaryService diaryService=new DiaryService(getContext());
		Diary diary=new Diary("nana", "she is beautiful", getCurrentTime(),2);
		diaryService.update(diary);
	}
	/*
	 *  根据id查找日记
	 */
	public void testFind(){
		DiaryService diaryService=new DiaryService(getContext());
		Diary diary=diaryService.find(2);
		System.out.println(diary.getTitle());
	}
	/*
	 *  分页查询
	 */
	public void testGetDiariesByPage(){
		DiaryService diaryService=new DiaryService(getContext());
		List<Diary> diaries=diaryService.getDiariesByPage(0, 2);
		System.out.println(diaries);
	}
	/*
	 *  得到所有日记
	 */
	public void testGetAllDairies(){
		DiaryService diaryService=new DiaryService(getContext());
		List<Diary> diaries=diaryService.getAllDairies();
		System.out.println(diaries);
	}
	/*
	 *  获取记录总数
	 */
	public void testCount(){
		DiaryService diaryService=new DiaryService(getContext());
		long count=diaryService.count();
		System.out.println(count);
	}
}
第五,对程序进行布局,写了三个xml文件,代码分别如下:

1.activity_my_diary.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
   <ListView 
       android:id="@+id/listView"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"></ListView>
</RelativeLayout>
2.title_list.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <!-- 左边部分显示日记题目  -->
    <TextView 
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"/>
    <!-- 右边部分显示时间 -->
    <TextView 
        android:id="@+id/datetime"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:textSize="15dp"/>

</LinearLayout>
3.activity_diary.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">
    <!-- 题目  -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/title"
        tools:context=".DiaryActivity" 
        android:textSize="20dp"/>
    <!-- 输入题目的对话框  -->
    <EditText 
        android:id="@+id/putTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="text"/>
    <!-- 内容  -->
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/content"
        android:textSize="20dp"/>
    <!-- 输入内容的对话框  -->
    <EditText 
        android:id="@+id/putContent"
        android:layout_width="fill_parent"
        android:layout_height="150dp"
        android:inputType="text"
        android:gravity="top"/>
    <!-- 保存按钮  -->
    <Button 
        android:id="@+id/save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/save"
        android:textSize="20dp"/>

</LinearLayout>
第六,Activity的实现方法,代码分别如下:

1.MyDiaryActivity.java:

package com.example.mydiary;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.example.mydiary.R;
import com.example.mydiary.entity.Diary;
import com.example.mydiary.service.DiaryService;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.support.v4.app.NavUtils;

public class MyDiaryActivity extends Activity {
	private ListView listView;
	private List<Map<String, Object>> data;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_my_diary);
		listView = (ListView) this.findViewById(R.id.listView);
		data = getData();
		SimpleAdapter adapter = new SimpleAdapter(this, data,
				R.layout.title_list, new String[] { "title", "datetime" },
				new int[] { R.id.title, R.id.datetime });
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(new ListViewHandle());
	}
    /*
     *  处理ListView点击事件的方法
     */
	private class ListViewHandle implements OnItemClickListener{

		@Override
		public void onItemClick(AdapterView<?> adapter, View view, int position,
				long arg3) {
			Intent intent=new Intent(MyDiaryActivity.this, DiaryActivity.class);
			Bundle bundle=new Bundle();
			String position1=Integer.toString(position+1);
			bundle.putString("message", "修改");
			bundle.putString("position", position1);
			System.out.println("checked "+position1);
			intent.putExtras(bundle);
			startActivity(intent);
		}
		
	}
	private List<Map<String, Object>> getData() {
		data = new ArrayList<Map<String, Object>>();
    	DiaryService diaryService = new DiaryService(this);
    	List<Diary> listDiary = diaryService.getAllDairies();
    	Map<String,Object> item = new HashMap<String,Object>();
    	
    	for(Diary diary:listDiary){
    		item = new HashMap<String, Object>();
    		item.put("title", diary.getTitle());
    		item.put("content", diary.getContent());
    		item.put("datetime",	diary.getDatetime());
    		item.put("id", diary.getId());
    		System.out.println("item="+item.get("title"));
    		data.add(item);
    	}
    	
    	return data;
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// 获得当前菜单,并填充菜单
		getMenuInflater().inflate(R.menu.activity_my_diary, menu);
		return true;
	}
    /*
     *  对菜单点击事件进行处理
     */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch(item.getItemId()){
		case R.id.add:
			Intent intent=new Intent(MyDiaryActivity.this, DiaryActivity.class);
			Bundle bundle=new Bundle();
			bundle.putString("message", "新建");
			bundle.putString("position", "0");
			intent.putExtras(bundle);
			startActivity(intent);
			break;
		case R.id.delete:
			showDialog(1);
			break;
		}
		return super.onOptionsItemSelected(item);
	}
	/*
	 *  建立对话框
	 */
	@Override
	public Dialog onCreateDialog(int id) {
		switch(id){
		case 1:
			return buildDialog(MyDiaryActivity.this);
		}
		return null;
	}
    /*
     *  buildDialog方法
     */
	private Dialog buildDialog(Context context) {
		AlertDialog.Builder builder=new AlertDialog.Builder(context);
		builder.setTitle(R.string.title1);
		builder.setMessage(R.string.message);
		// 确定按钮
		builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				DiaryService diaryService=new DiaryService(getApplicationContext());
				System.out.println((int) (listView.getSelectedItemId()+1));
				// 调用 listview.getSelectedItemId()来获得id 
				diaryService.delete((int) (listView.getSelectedItemId()+1));
				Toast.makeText(MyDiaryActivity.this, "删除成功!", Toast.LENGTH_LONG).show();
				onRestart();
			}
		});
		// 取消按钮
		builder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				
			}
		});

		return builder.create();
	}

	@Override
	public void onRestart() {
		super.onRestart();
		listView = (ListView) this.findViewById(R.id.listView);
		data = getData();
		SimpleAdapter adapter = new SimpleAdapter(this, data,
				R.layout.title_list, new String[] { "title", "datetime" },
				new int[] { R.id.title, R.id.datetime });
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(new ListViewHandle());
	}
	
}

2.DiaryActivity.java:

package com.example.mydiary;

import com.example.mydiary.entity.Diary;
import com.example.mydiary.service.DiaryService;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class DiaryActivity extends Activity {
	private EditText title;
	private EditText content;
	private Button save;
	String message;
	int position;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_diary);
		title = (EditText) this.findViewById(R.id.putTitle);
		content = (EditText) this.findViewById(R.id.putContent);
		save=(Button) this.findViewById(R.id.save);
		DiaryService diaryService = new DiaryService(this);
		Intent intent = this.getIntent();
		Bundle bundle = intent.getExtras();
		message = bundle.getString("message");
		position = Integer.parseInt(bundle.getString("position"));
		System.out.println("position:"+position);
		if (position != 0) {
			Diary diary = diaryService.find(position);
			System.out.println(diary.getTitle());
			title.setText(diary.getTitle());
			content.setText(diary.getContent());
		}
		save.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if (message.equals("新建")) {
					DiaryService diaryService = new DiaryService(
							getApplicationContext());
					Diary diary = new Diary();
					String title1 = title.getText().toString();
					String content1 = content.getText().toString();
					System.out.println("title1:"+title1);
					System.out.println("content1"+content1);
					diary.setTitle(title1);
					diary.setContent(content1);
					diaryService.save(diary);
					Toast.makeText(DiaryActivity.this, R.string.savesuccess,
							Toast.LENGTH_LONG).show();
				}
				if (message.equals("修改")) {
					DiaryService diaryService = new DiaryService(
							getApplicationContext());
					Diary diary = new Diary();
					String title1 = title.getText().toString();
					String content1 = content.getText().toString();
					System.out.println("title1:"+title1);
					System.out.println("content1"+content1);
					diary.setTitle(title1);
					diary.setContent(content1);
					diary.setId(position);
					diaryService.update(diary);
					Toast.makeText(DiaryActivity.this, R.string.savesuccess,
							Toast.LENGTH_LONG).show();
				}
			}
		});
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_diary, menu);
		return true;
	}

}
到此,基本功能已实现。


  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值