Android记事本NotePad

起初接触Android的时候用Eclipse写的小应用,后面手动移植到了Android Studio中,可以新建,查看,删除便签等,今天整理一下代码,完整的代码可以在我的GitHub上看到,链接在文末。

DbHelper:

package com.zms.notepad;

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

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

/**
 * Created by AlexZhou on 2015/2/3.
 * 11:12
 */
public class NoteDbHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 2;
    private static final String DATABASE_NAME = "notes_db";

    private static final String NOTE_TABLE_NAME = "note";
    private static final String NOTE_COL_ID = "_id";
    private static final String NOTE_COL_TITLE = "title";
    private static final String NOTE_COL_CONTENT = "content";
    private static final String NOTE_COL_CREATED = "created";
    private static final String NOTE_COL_MODIFIED = "modified";

    private static final String[] NOTE_COL_PROJECTION = new String[] {
            NOTE_COL_ID,
            NOTE_COL_TITLE,
            NOTE_COL_CONTENT,
            NOTE_COL_CREATED,
            NOTE_COL_MODIFIED
    };

    public NoteDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Create table
    @Override
    public void onCreate(SQLiteDatabase db) {
        String createNoteTableSql = "CREATE TABLE " + NOTE_TABLE_NAME + " ("
                + NOTE_COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + NOTE_COL_TITLE
                + " TEXT," + NOTE_COL_CONTENT + " TEXT," + NOTE_COL_CREATED
                + " INTEGER," + NOTE_COL_MODIFIED + " INTEGER" + ");";
        db.execSQL(createNoteTableSql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + NOTE_TABLE_NAME);

        // Create tables again
        onCreate(db);
    }

    // Add new note
    public int addNote(Note note) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(NOTE_COL_TITLE, note.getTitle());
        values.put(NOTE_COL_CONTENT, note.getContent());
        values.put(NOTE_COL_CREATED, note.getCreated());
        values.put(NOTE_COL_MODIFIED, note.getModified());

        // Insert to database
        long rowId = db.insert(NOTE_TABLE_NAME, null, values);

        // Close the database
        db.close();

        return (int) rowId;
    }

    // Get one note
    public Note getNote(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(NOTE_TABLE_NAME, NOTE_COL_PROJECTION,
                NOTE_COL_ID + "=?", new String[] { String.valueOf(id) }, null,
                null, null, null);

        if (cursor != null)
            cursor.moveToFirst();

        Note note = new Note(cursor.getInt(0), cursor.getString(1),
                cursor.getString(2), cursor.getLong(3), cursor.getLong(4));

        return note;
    }

    // Get all notes
    public List<Note> getAllNotes() {
        List<Note> noteList = new ArrayList<Note>();
        String selectQuery = "SELECT * FROM " + NOTE_TABLE_NAME;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Note note = new Note(cursor.getInt(0), cursor.getString(1),
                        cursor.getString(2), cursor.getLong(3),
                        cursor.getLong(4));
                noteList.add(note);
            } while (cursor.moveToNext());
        }

        // return contact list
        return noteList;
    }

    public Cursor getAllNotesCursor() {
        String selectQuery = "SELECT * FROM " + NOTE_TABLE_NAME;

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        return cursor;
    }

    public int updateNote(Note note) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(NOTE_COL_TITLE, note.getTitle());
        values.put(NOTE_COL_CONTENT, note.getContent());
        values.put(NOTE_COL_CREATED, note.getCreated());
        values.put(NOTE_COL_MODIFIED, note.getModified());

        return db.update(NOTE_TABLE_NAME, values,
                NOTE_COL_ID + "=?", new String[] { String.valueOf(note.getId()) });
    }

    public void deleteNote(int noteId) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(NOTE_TABLE_NAME, NOTE_COL_ID + "=?",new String[] { String.valueOf(noteId) } );
        db.close();
    }

    public void deleteAllNotes() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(NOTE_TABLE_NAME, null, null);
        db.close();
    }
}

新建和修改便签:

package com.zms.notepad;

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

/**
 * Created by AlexZhou on 2015/2/3.
 * 11:14
 */
public class NoteNew extends Activity {
    private EditText etTitle;        //便签标题
    private EditText etContent;    //便签内容
    private Button btnCancel;
    private Button btnSave;
    private int _noteId;        //便签ID
    private NoteDbHelper _db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.note_new);
        etTitle = (EditText) findViewById(R.id.etTitle);
        etContent = (EditText) findViewById(R.id.etContent);
        btnCancel = (Button) findViewById(R.id.btnCancel);
        btnSave = (Button) findViewById(R.id.btnSave);

        btnCancel.setOnClickListener(new OnClickListenerImp());
        btnSave.setOnClickListener(new OnClickListenerImp());
        _db = new NoteDbHelper(this);
        Intent intent = getIntent();
        _noteId = intent.getIntExtra(NoteList.EXTRA_NOTE_ID, -1);
        if (_noteId > 0) {
            Note note = _db.getNote(_noteId);
            etTitle.setText(note.getTitle());
            etContent.setText(note.getContent());
        }
    }

    private class OnClickListenerImp implements View.OnClickListener {
        @Override
        public void onClick(View v) {

            if (v == btnCancel) {
                Toast.makeText(NoteNew.this, "天启提示:放弃新建便签", Toast.LENGTH_SHORT).show();
                finish();
            } else if (v == btnSave) {
                String titleVoid = etTitle.getText().toString();
                String contentVoid = etContent.getText().toString();
                if (titleVoid.equals("") || contentVoid.equals("")) {
                    Toast.makeText(NoteNew.this, "天启提示:标题或内容为空", Toast.LENGTH_SHORT).show();
                } else {
                    ToDatabase();    //插入数据库
                    Toast.makeText(NoteNew.this, "天启提示:便签保存成功", Toast.LENGTH_SHORT).show();
                    finish();
                }
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.note_new_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_exit) {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            android.os.Process.killProcess(android.os.Process.myPid());
            return true;
        } else if (id == R.id.action_about) {
            Intent intent = new Intent(this, About.class);
            startActivity(intent);
            return true;
        }
        return super.onOptionsItemSelected(item);

    }

    public final int ToDatabase() {
        String title = etTitle.getText().toString();
        String content = etContent.getText().toString();
        int newNoteId = -1;
        if (_noteId > 0) {
            Note note = _db.getNote(_noteId);
            note.setTitle(title);
            note.setContent(content);
            note.setModified(Long.valueOf(System.currentTimeMillis()));
            _db.updateNote(note);
        } else {
            Note newNote = new Note(title, content);
            newNoteId = _db.addNote(newNote);
        }
        return newNoteId;
    }
}

查看便签:

package com.zms.notepad;

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class Main extends ActionBarActivity {

    private ImageView ivLogo;
    private Button btnView;
    private Button btnNew;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ivLogo = (ImageView) findViewById(R.id.ivLogo);
        btnView = (Button) findViewById(R.id.btnView);
        btnNew = (Button) findViewById(R.id.btnNew);

        btnView.setOnClickListener(new OnClickListenerImp());
        btnNew.setOnClickListener(new OnClickListenerImp());
        ivLogo.setAlpha(50);     //Alpha 0-255,设置主页Logo的透明度
    }

    private class OnClickListenerImp implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            if (v == btnView) {
                Intent intent = new Intent(Main.this, NoteList.class);
                startActivity(intent);
            } else if (v == btnNew) {
                Intent intent = new Intent(Main.this, NoteNew.class);
                startActivity(intent);
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if (id == R.id.action_about) {
            //点击菜单兰“关于”按钮后触发
            Intent intent = new Intent(this, About.class);
            startActivity(intent);
            return true;
        } else if (id == R.id.action_exit) {
            //点击菜单兰“退出”按钮后触发
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            android.os.Process.killProcess(android.os.Process.myPid());
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

}

转载请注明出处:周木水的CSDN博客 http://blog.csdn.net/zhoumushui

我的GitHub:周木水的GitHub https://github.com/zhoumushui

时间: 2024-07-29 03:17:55

Android记事本NotePad的相关文章

Android记事本NoteBook

也是从MTK的SDK中移植出来的,可以对记事进行分类. 具体的代码可以在GitHub上面查看,链接在文末.下面是效果图: 主Activity,Note清单: package com.zms.notebook; import android.app.ActionBar; import android.app.AlertDialog; import android.app.ListActivity; import android.app.ProgressDialog; import android.

android 记事本程序源码

应用实现密码登陆,记事本内容可增删改除等操作,用listview显示每次保存的记事内容,实现了记事本的基本功能.代码都有详细注解. 1.代码的目录 密码登陆使用的是sharedpreferences记录输入的密码,sharedPreferences简单介绍 做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库来存放并不划算,因为数据库连接跟操作等耗时大大影响了程序的效率,因此我们使用键值这种一一对应的关系来存放这些配置信息.Shar

Xamarin Android 记事本(三)删改

这篇我就不做太多的说明了,数据操作之前也都举过例子了,这里就直接贴出删除和修改的代码. public override bool OnOptionsItemSelected(IMenuItem item) { switch (item.ItemId) { case 1: { Android.App.AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog ad = builder.Create(); ad.S

Xamarin.Android 记事本(一)

导读 1.视图及数据库的创建 2.listview数据绑定 3.listview的点击事件 正文 如何创建一个listview,大家可以看这里,基本流程操作是一模一样的,我就不多说了,然后就是新建一个数据库,代码如下 class Sqlite : SQLiteOpenHelper { public Sqlite(Context context) : base(context, "notebooksql.db", null, 1) { } public override void OnC

Android示例程序剖析之记事本(一)

Android SDK提供了很多示例程序,从这些示例代码的阅读和试验中能够学习到很多知识.本系列就是要剖析Android记事本示例程序,用意就是一步步跟着实例进行动手操作,在实践中体会和学习Android开发.该系列共有四篇文章,本文是第一篇. 前期准备 搭建开发环境,尝试编写"Hello World”,了解Android的基本概念,熟悉Android的API(官方文档中都有,不赘述). 记事本程序运行界面 先来简单了解下程序运行的效果: 程序入口点 类似于win32程序里的WinMain函数,

Android 自定义组件之如何实现自定义组件

参考链接:http://blog.csdn.net/jjwwmlp456/article/details/41076699 简介 Android提供了用于构建UI的强大的组件模型.两个基类:View和ViewGroup. 可用Widget的部分名单包括Button, TextView, EditText, ListView, CheckBox,RadioButton, Gallery, Spinner,以及一些有特别作用的组件: AutoCompleteTextView, ImageSwitch

Android四大基本组件之 ContentProvider

Android是如何实现应用程序之间数据共享的?一个应用程序可以将自己的数据完全暴露出去,外界更本看不到,也不用看到这个应用程序暴露的数据是如何存储的,或者是使用数据库还是使用文件,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和这个程序里的数据打交道,例如:添加(insert).删除(delete).查询(query).修改(update),当然需要一定的权限才可以. 如何将应用程序的数据暴露出去? Android提供了ContentProvider,一个程序可

run命令

1.打开IIS %SystemRoot%\system32\inetsrv\iis.msc 2.打开EventView eventvwr 3.打开程序和功能 appwiz.cpl 4.打开internet 属性 inetcpl.cpl 5.打开画图板 mspaint 6.打开计算器 calc 7.打开记事本 notepad 8.打开cmd cmd 9.重启 shutdown -r -t 0 10.关机 shutdown -s -t 0

coreseek常见错误原因及解决方法

coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索.论坛/站内搜索.数据库搜索.文档/文献检索.信息检索.数据挖掘等应用场景,用户可以免费下载使用 本文为大家整理了coreseek/sphinx中文检索引擎的常见问题和解决方法,感兴趣的同学参考下. Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协