個人日記本的實現

實現個人日記本的效果如下,如果點擊進入可以對原日記進行修改,點擊菜單可以添加或者刪除一篇日記:


首先,先創建日記實體類,代碼如下:

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;
	}

}
到此,基本功能已實現。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章