您的位置:首页 > 移动开发 > Android开发

一个android记事本的学习过程记录! (一)

2016-04-30 13:12 537 查看
一 首先是这个记事本我想实现的几个功能!

1.记录文字;

2.记录图片;

3.可以记录视频;

4.可以查看已经记录的事件;

二 在知道了要实现的功能后就要开始进入设计UI 的部分了;

首先我们在主界面中,设计简单的几个控件,一个ListView用来显示已经记录的事件;三个Button分别对应文字,图片,视频的记事。

MainActivity.xml



设计完主界面后,开始写记录内容的界面,context.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="vertical" >

<ImageView
android:id="@+id/c_img"
android:layout_width="250dp"
android:layout_height="350dp"
android:visibility="gone"/>

<VideoView
android:id="@+id/c_video"
android:layout_width="250dp"
android:layout_height="350dp"
android:visibility="gone"/>

<EditText
android:id="@+id/ettext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1.00"
android:background="@null"
android:gravity="top"
android:hint="有了记事本,生活真方便!" />

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<Button
android:id="@+id/save"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="保存"/>

<Button
android:id="@+id/cancle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="取消"/>
</LinearLayout>

</LinearLayout>








这是记录三种不同类型的事件时,所使用的不同的界面;

那么主要的UI 界面就算完成了!

三 .界面完成以后就要开始完成功能的实现!

1.首先先完成主界面和几个的界面切换;

//实例化控件
private Button textButton,imgButton,videoButton;
private ListView lv;
//设置监听事件
lv=(ListView) findViewById(R.id.list);
textButton=(Button) findViewById(R.id.text);
imgButton=(Button) findViewById(R.id.img);
videoButton=(Button) findViewById(R.id.video);
textButton.setOnClickListener(this);
imgButton.setOnClickListener(this);
videoButton.setOnClickListener(this);
//使用Intent方法实现界面的切换
public void onClick(View arg0)
{
intent=new Intent(this,addContent.class);
// TODO Auto-generated method stub
switch (arg0.getId())
{
case R.id.text:
intent.putExtra("flag", "text");
startActivity(intent);
break;
case R.id.img:
intent.putExtra("flag", "img");
startActivity(intent);
break;
case R.id.video:
intent.putExtra("flag", "video");
startActivity(intent);
break;
}
}

通过使用Intent方法的putExtra方法将三个不同的参数值传递过去时,在context.java 中通过getIntent().getStringExtra("flag");方法得到传过的数据从而显示不同的界面和功能!

2. 接下来要实现在记录文字以后点击保存后的功能;开始创建数据库!

现在回忆一下关于数据库方面的知识,此处使用的是SQList数据库。关于SQList数据库的基本知识:

SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器

支持的数据类型:空值,整形,浮点,字符串,二进制等,数据库常用的类型都支持;

SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法,

openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory),打开或创建数据库

insert(String table,String nullColumnHack,ContentValues values) 插入数据

delete(String table,String whereClause,String[] whereArgs) 删除数据

query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy) 查询语句

update(String table,ContentValues values,String whereClause,String[] whereArgs) 修改语句

execSQL(String sql) 执行一条语句有三个方法

4. SQLiteOpenHelper 这是一个辅助类,用于创建一个数据库,该类有三个方法,一个构造函数,一个create方法,一个更新数据库的方法!

3. 现在我们创建一个保存内容的数据库;

package com.example.hello_notes;

import android.R.style;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class NotesDB extends SQLiteOpenHelper
{

public static final String TABLE_NAME="notes";
public static final String CONTENT="content";
public static final String ID="_id";
public static
3ff0
final String TIME="time";

//后加入  文本和视频
public static final String PATH="path";
public static final String VIDEO="video";

public NotesDB(Context context)
{
super(context, "notes", null, 1);
// TODO Auto-generated constructor stub
}

@Override//创建数据库!
public void onCreate(SQLiteDatabase arg0)
{
// TODO Auto-generated method stub
arg0.execSQL("create table "+TABLE_NAME+"("
+ID+" integer primary key autoincrement,"
+CONTENT+" text not null,"
+PATH+" text not null,"+VIDEO+" text not null,"
+TIME+" text not null)"
);
}

@Override//更新数据库!
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2)
{
// TODO Auto-generated method stub

}

}

在程序中把所有的字段单独定义,方便以后修改;在这个类中,生成一个notes的表,一个ID标示,一个记录文本内容,一个图片的路径,一个记录视频的路径的字段,还有一个记录时间的字段;

4.创建好数据库以后,我们要在主程序中实例化一个数据库;

//建立数据库

private NotesDB notesDB;

private SQLiteDatabase dbWrite;

在oncreate中实例化:

notesDB=new NotesDB(this);

dbWrite=notesDB.getWritableDatabase(); //获得数据库写的权限

5. 在main程序中点击文本后向addcontext类中传递的flag=“text”进入context界面,所以点击保存以后仅仅保存文本内容,

创建一个向数据库中添加数据的方法:

//在数据库中添加数据!

public void addDB(){ //操作数据库添加数据

ContentValues cValues=new ContentValues();

cValues.put(notesDB.CONTENT, editText.getText().toString());

cValues.put(notesDB.TIME, getTime());

cValues.put(notesDB.PATH, "");

cValues.put(notesDB.VIDEO, "");

dbWrite.insert(notesDB.TABLE_NAME, null, cValues);

}

由于在数据库中要保存时间的信息,所有要创建一个获得当前时间的方法,

//取得时间!

public String getTime(){

long time=System.currentTimeMillis(); //获取时间段的长度

SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //日期的格式

Date curDate=new Date(time); //获取当前的日期

String str=format.format(curDate); //取出format格式的时间!

return str;

}

此时就可以将我们在编辑框中书写的文本保存在数据库中;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: