[Android开发学习] day04

Day 04

SQLite:把结构化的数据保存在私有数据库中。

 

数据库的增删改查

创建数据库

在model包:DBHelper.java文件中,

public class
DBHelper extends SQLiteOpenHelper{

}

修改构造方法DBHelper

public DBHelper(Contextcontext) {

super(context,
DBNAME,
null, 1);

}

 

在oncreate方法中创建数据库

onCreate(SQLiteDatabase db)————创建表格语句

String sqlStr="create table "+TABNAME+"(" +

"id integer primary key autoincrement," +

"name varchar(20),"+

"cuisine varchar(20),"+

"picPath varchar(80),"+

"material varchar(20),"+

"ingredient varchar(20),"+

"cookingStep varchar(20),"+

"audioPath varchar(80),"+

"videoPath varchar(80))";

db.execSQL(sqlStr);

 

SQLite数据库的生成目录:data——data——应用程序包—databases目录-XXX.db文件

 

插入数据

1. 创建进行数据处理的XXXDao.java文件。

2. 添加成员变量:

private FoodHelper
helper;

private Context context;

3. 重写构造函数(source——>generate constructor using field)

勾选context,不用勾选helper

4. 添加代码:

public FoodDao(Context context) {

super();

this.context = context;

helper=new FoodHelper(context);

}

5. 创建私有成员变量

private SQLiteDatabase
db;

6. 编写打开数据库的方法openDB()

//打开数据库,并获得数据库对象

public
void
openDB(){

db=helper.getWritableDatabase();

}

7. 编写关闭数据库的方法closeDB()

//关闭数据库

public
void
closeDB(){

if(db!=null){

db.close();

}

}

8. 数据库插入数据方法add()

public
void 
add(){

//openDb

openDB();

//创建一个contentvalues:————>是一个map集合

ContentValuesvalue=newContentValues();

//主键自增,不需要赋任何值。

//主键autoincrement:用putnull即可

value.putNull("id");

value.put("name",
"水煮肉片");

//插入数据的方法

db.insert("food2",
null, value);

//closeDB

closeDB();

}

 

 

注意:插入数据的api:contentValues:内容值:一个集合。用put方法插入。

Public void insertDB(Music music){

    ContentValues  values = new ContentValues();

    values.put(FIELD_ID, music.getId());

    values.put(FIELD_NAME,music.getName());

    values.put(FIELD_PLAYER, music.getPlayer());

    values.put(FIELD_PATH, music.getFilepath());

   

  database.insert(TABLE_NAME, null, values);

}

 

 

 

查询方法query

复杂。

Query方法

public Cursor query
(String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having, String orderBy)

 

table:要查询的数据库表名

columns:指定查询所要返回的列

selection:指定查询的条件,对应于SQL WHERE子句

selectionArgs:与selection配套,指定查询条件中参数的值

groupBy:对应于SQLGROUPBY子句——分组查询

having:对应于SQL HAVING子句——聚合语句查询

orderBy:对应于SQLORDERBY子句——排序

 

limit:对应于SQLLIMIT子句

distinct:对应于SQLDISTINCT子句

 

返回值:代表结果集的Cursor对象

 

查询全部数据:只需要给query方法传table一个参数即可。

 

 

步骤:

1. 在XXXDao.java中添加select方法

public void selectedAll(){

2. 添加打开和关闭数据库的方法

openDB();

closeDB();

3. 查询语句:

Cursor c=db.query("food2",
null,
null,
null,
null,
null,
null);

4. 添加代码:

if(c!=null){

while (c.moveToNext()) {

}

}

5. 在while循环中添加

while (c.moveToNext()) {

intid=c.getInt(c.getColumnIndex("id"));

String name=c.getString(c.getColumnIndex("name"));

System.out.println(id+"---"+name);

}

6. 在XXXactivity.java文件中添加

dao.selectedAll();

 

 

找不到adb时,在ddms模式下,找到adb页面,resetadb

 

 

根据条件查询

//根据条件查询——>name

1. 
创建方法:selectedByName

2. 
添加开关数据库的代码:

openDB();

closeDB();

3. 
编写sql语句

注意添加单引号!!!!!!

String sql="name like‘%"+name+"%‘";

4. 
创建cursor

Cursor c=db.query("food2",
null, sql, null,
null, null,
null);

5. 
添加循环

if(c!=null){

while (c.moveToNext()) {

int id=c.getInt(c.getColumnIndex("id"));

Stringname1=c.getString(c.getColumnIndex("name"));

System.out.println(id+"---"+name1);

}

}

6. 
在XXXactivity.java文件中添加

dao.selectedByName("水");

 

编辑框监听

1. 在activityXXX.xml中添加editText组件

2. 在XXXActivity.java文件中添加成员变量

private EditText
mEdtx;

private String
name;

3. 在XXXActivity.java文件中找到这个editText

mEdtx=(EditText)findViewById(R.id.edtx);  

4. 添加方法mEdtx.addTextChangedListener(){}

5. 在括号中填入new TextWatcher(),会自动生成三个函数

6.  在public
void

onTextChanged(CharSequence s,
int
start, int before,
int count) 添加代码:

Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();

int length=s.length();————输入字符串的长度

if(length<1){——为空则不操作

return;

}

name=s.toString();

dao.selectedByName(name);

列表——listview组件(纵向列表组件)

Listview在Layout的composite中

只显示文本

只显示图片加文本

ListView的创建和使用步骤

1. 在activityXXX.xml中拖入一个listview组件

2. 在XXXActivity.java文件中准备数据源

private String []
arr={"川菜","鲁菜","粤菜","湘菜","花菜"};

3. 声明listview

private ListView
mLv;

4. 初始化listview

mLv=(ListView)findViewById(R.id.listView1);

5. 声明适配器

ArrayAdapter<String> adapter =newArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
arr);

6. 给适配器绑定数据源

mLv.setAdapter(adapter);

显示图片加文本的ListView--->纵向列表

给listview匹配适配器步骤:

1.  在layout文件夹下创建list_item.xml文件

2.  在list_item.xml文件编辑下拉菜单每一行的显示布局

<ImageView

android:id="@+id/img"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/ic_launcher"/>

<TextView

android:id="@+id/tv"

android:layout_width="match_parent"

android:layout_height="wrap_content"

 android:text="TextView"/>

3.  在要显示下拉菜单的XXXActivity.java文件中声明一个listview

private
ListView mLv;

4.  在XXXActivity.java文件OnCreate方法中初始化listview

mLv=(ListView)findViewById(R.id.listView1);

5.  创建一个simpleAdapter:

SimpleAdapter adapter2=new
SimpleAdapter(context,data,resource,from,to);

参数解释:

Context:绑定的activity.this

Data:数据源map:存放的数据

Resource:布局文件————自己做(见第一步)R.layout.list_item

From:map集合所有key——string

To:你自己布局的所有组件的id——int 数组

6.  创建simpleadapter需要的参数变量XXXActivity的成员变量

private String[]
from = {"img","tv"};

private int[]
to ={R.id.img,R.id.tv};

//放所有自定义的组件的id

private List<Map<String,Object>>
data= new ArrayList<Map<String,Object>>();

7.  数据源初始化

注意:以下代码要放在第五步创建的SimpleAdapter之前!!!

//数据源初始化,一个map就是一小个选项里装配的所有数据

for(int i=0;i<arr.length;i++){

Map<String,Object> map=newTreeMap<String, Object>();

map.put("img", R.drawable.ic_launcher);

map.put("tv",
arr[i]);

//private String [] arr={"川菜","鲁菜","粤菜","湘菜","花菜"};

data.add(map);

}

8.  给listview配置适配器

mLv.setAdapter(adapter2);

F2————重命名文件

规范化代码实例:

数据库操作实例

1.  在要进行数据库操作的XXXActivity.java文件中添加私有变量

//准备菜系

private String[]
cuisine={"川菜","鲁菜","粤菜","苏菜","浙菜","湘菜","闽菜","徽菜","其它"};

//声明组件

private AutoCompleteTextView
mAuTx;

private ImageButton
mVideo,mPhoto,mSave,mCuisine_btn;

   private EditText
mName,mCuisine,mMaterial,mIngredient,mStep;//创建Dao对象

private Dao
dao;

2.  在OnCreate方法中实例化dao对象

//一定要记得实例化dao!!!!!!!!!!

dao=newDao(this);

3.  在OnCreate方法中初始化组件

//初始化组件

mAuTx=(AutoCompleteTextView)findViewById(R.id.add_cuisine);

mVideo=(ImageButton)findViewById(R.id.imageButton3);

mPhoto=(ImageButton)findViewById(R.id.imageButton4);

mSave=(ImageButton)findViewById(R.id.add_save_btn);

mCuisine_btn=(ImageButton)findViewById(R.id.add_cuisine_btn);

mName=(EditText)findViewById(R.id.add_name);

mMaterial=(EditText) findViewById(R.id.add_material);

mIngredient=(EditText) findViewById(R.id.add_ingredient);

mStep=(EditText) findViewById(R.id.add_cookingstep);

mCuisine=(EditText) findViewById(R.id.add_cuisine);

4.  在OnCreate方法中创建数组适配器

//创建数组适配器

ArrayAdapter<String>
adapter1=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,cuisine);

5.  在OnCreate方法中绑定适配器

//绑定适配器

mAuTx.setAdapter(adapter1);

6.  在OnCreate方法中,给button绑定点击事件处理

//给菜系添加button绑定点击事件处理

mCuisine_btn.setOnClickListener(new OnClickListener() {

@Override

public
void
onClick(View arg0) {

mAuTx.showDropDown();

}

});

7.  给保存button保定单击处理事件setOnClickListener

//给保存Button绑定点击处理事件

mSave.setOnClickListener(new OnClickListener() {

@Override

public void onClick(Viewarg0) {

//非空验证

Stringname=mName.getText().toString();

Stringcuisine=mCuisine.getText().toString();

Stringmaterial=mMaterial.getText().toString();

Stringingredient=mIngredient.getText().toString();

Stringcookingstep=mStep.getText().toString();

Foodf= new Food(name,
cuisine, material, ingredient,
" ",
cookingstep,
" ",
" ");

dao.add(f);

}

});

8.  从组件获取组件携带的文本

.getText().toString();

例如代码:

在OnClickListener方法中的onClick方法中:

Stringname=mName.getText().toString();

Stringcuisine=mCuisine.getText().toString();

Stringmaterial=mMaterial.getText().toString();

Stringingredient=mIngredient.getText().toString();

Stringcookingstep=mStep.getText().toString();

9.  创建一个数据模型对象Food.java(model层),并将其数据实体类封装,

参见下一个大标题“Javabean
实体类的封装

10. 创建一个food对象,传入对应的参数。

在OnClickListener方法中的onClick方法中

Food f= new Food(name, cuisine, material,ingredient,
"",cookingstep,
"",
" ");

11. 调用dao.java数据库操作类中的add插入一条记录方法add

//将f这条记录插入

dao.add(f);

解释说明:model层

DBHelper.java————>链接SQLite数据库并创建表对象

Dao.java——————>数据库操作方法增删改查方法

Food.java————>存放数据模型的数据(结构)类

Javabean
实体类的封装

1.  在model层创建一个类:food.java

2.  创建私有成员变量

private int id;

private String
name;

private String
cuisine;

private String
material;

private String
ingredient;

private String
picpath;

private String
cookingstep;

private String
vediopath;

3.  Source->Generate setters and getters->全选->ok

4.  Source->Generate Construtor using field->全选(除id)->ok

public food(String name, String cuisine, String material,Stringingredient, String picpath,
String cookingstep,

Stringvediopath, String audiopath) {

super();

this.name = name;

this.cuisine = cuisine;

this.material = material;

this.ingredient = ingredient;

this.picpath = picpath;

this.cookingstep = cookingstep;

this.vediopath = vediopath;

this.audiopath = audiopath;

}

时间: 2024-08-06 07:49:48

[Android开发学习] day04的相关文章

Android开发学习之路--网络编程之xml、json

一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载xampp,然后安装之类的就不再多讲了,参考http://cnbin.github.io/blog/2015/06/05/mac-an-zhuang-he-shi-yong-xampp/.安装好后,启动xampp,之后在浏览器输入localhost或者127.0.0.1就可以看到如下所示了: 这个就

Android开发学习---使用XmlPullParser解析xml文件

Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将主要介绍pull解析器解析xml文件,环境为ubuntu 12.04+ intelij 13.1 + android sdk 2.1 一.创建一个XML项目,步骤如下: 二.解析一个xml文件: assets/person.xml <?xml version="1.0" encodi

Android开发学习---使用Intelij idea 13.1 进行android 开发

原文:Android开发学习---使用Intelij idea 13.1 进行android 开发 1.为什么放弃eclipse?太卡!! 实在受不了eclipse的卡了,运行WEB项目还好,但android开发实在太慢,太慢!经常卡死,CPU经常被占满! 看网上很多人都说比Intelij idea好用,就试下,目前还在test阶段,总之是各种不习惯,很多快捷键之类的跟eclipse完全不一样.还要多熟悉! 另外android studio 也比较卡,而且用起来相当难受,完全是intelij 的

【Android开发学习笔记】【第三课】Activity和Intent

首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activity的布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

android 开发学习笔记 (一)

每个app 都有一个自己的 linux 进程: 每个进程都在自己的虚拟机里执行 两个app 可以跑在一个进程,一个vm里 android app 四大组件:activity,content provider,      services, broardcast receivers Content Resolver 激活 Content Provider You can start an      activity (or give it something new to do) by passi

Android开发学习---template requires a minimum SDK version of at least 7,build target API version of 14

adt 22.6.3的bug 当adt更新到22.6.3,其编辑器中最低支持api7,即android 2.1,这里可能是google故意这么做的,也可能是其bug.其target sdk 和compile sdk最低都为14,即anroid 4.0,这里建议都设为最高的api 19,即android 4.4;否则会一直报错,类似错误如下: This template requires a minimum SDK version of at least 7, and the current mi

android开发学习之路——连连看之游戏逻辑(五)

GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖,程序需要GameService组件包含如下方法.   ·start():初始化游戏状态,开始游戏的方法.     ·Piece[][] getPieces():返回表示游戏状态的Piece[][]数组.     ·boolean hasPieces():判断Pieces[][]数组中是否还剩Piec

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity

android开发学习笔记000

使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个一直梦想走技术流的再疯狂一次.2014.08.06. 直奔主题——>android开发学习笔记001 android开发学习笔记000