常用知识点

Xml:解析(可扩展表记语言)

标记:成对出现,大小写区分

标记的表示:对内容的描述

解析方式:

1.Dom:文档对象模型

   将XML所有的内容全部载入内存,随机读取

   缺点:占用内存,当文档非常大时

   1.DocumentBuilderFactory

   2.DocumentBuilder

   3.Document

 

     DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance()

     DocumentBuilder db = dbf。newDocumentBuilder()

     Document doc =db.parse(file);

     Element root =doc.getDocumentElement();

     NodeList bookList =root.getChildNodes();

   接口:Document

      getDocumentElement();:Element

      取得文档中根元素

   接口:Node

      getChildNodes();

      返回节点中的子节点

     

      getTextContent():标记之间包含的值

      getNodeName();String;

 

   NodeList

      item(Index):Node

 

SimpleAdapter adapter = newSimpleAdapter{context(上下文),data(要显示的数据),resouce(显示布局),from(显示key名),to(显示控件的ID)};

 

2.SAX:简单--只读只进--对文档不做修改---事件驱动::当遇到相应节点,触发事件,,事件处理由程序员完成

   所有处理由程序员完成

   顺序读取

   优点:占用内存小,

   缺点:不灵活(只能按顺序读)

   实现接口:ContentHandler

   DefaultHandler--实现了接口的类

   自定义自己实现类继承DefaultHandler

      startDocument

      startElement--遇到开始节点

      endElement--遇到结束

      endDocument

      characters:节点间内容

   问题:List<Book>

 

3.PULL

   1.事件的类型--getEventType():int

      START_DOCUMENT--表开始

      END_DOCUMENT--表结束

      START_TAG --标记,元素,节点开始

      END_TAG--标记结束

   2.读取下一个元素--next():int

   3.读取内容:nextText():String返回的内容

      有内容:if(name.equals("author")){

            String content = parser.nextText();

            }

    处理过程:

   1.解析器:(xml工具类)

      XmlPullParser parser = Xml.newPullParser();

   2.用输入流方式解析Xml

      InputStream imputStream = new FileInputStream("  ");

   3.读取节点,事件类型

   4.switch()一一判断

   5.next()读取下一个元素

 

   返回所需的List,在UI中ListView中显示

 

 

 

 

Sql语句:(结构化查询语言)

 

数据库管理系统:(DBMS)

      数据完整性

      数据共享性

DDL:数据库定义语言--定义对象

Create:创建

create 数据库(createDatabases)

 

***create 表(表名)****

create table (表名)

(

   列名 类型(长度) 约束,

   列名 类型

)

约束:

主键:唯一标识记录的(primarykey 不可重复,不可为空)放在类型后面

自动编号autoincrement

外键:其他表中的主键在自身表中使用,如果其他表中未出现过的值,自身表中不       可出

create table Teacher

(

   rid integer primary key autoincrement,

   tname,

   tid

);

 

create table Student

(

   sid integer primary key autoincrement,

   sname,

   sage,

   tid,

   foreign key(tid) reference Teacher(tid)

);

 

create 存储过程

……

 

Drop:删除

drop table (表名);

 

 

DML:数据操纵语言--数据操作

 

select:选择

select * from 表名;

 

select 列名 from 表名 where 条件

 

指定列:select 列名,列名 from 位置

1.显示所有行所有列:

   select * (或表中所有列的名字)from表名

2.选择部分信息,只需要某个(些)列

   select 列名 from 表名;

3.如果显示信息不希望重复,distinct

   select distinct 列名 from 表名;

4.选择全部列,部分的行

   select * from 表名 where 行条件 and/or 条件;

逻辑运算符 and/or/ not/ in

   between and……

5.模糊查询  

   %表示任意多个任意字符

      select * from 表名  where 列名 like '*%';

   _表示一个任意字符

      select * from 表名  where 列名 like '*_';

6.统计:聚合函数

   count (列名) max (列名) min(列名) avg(列名)sum()列名

   对于数据进行统计,如果要分组统计,group by(和聚合函数一同使用)

   group by 写在 where

      select category,count(category) from book where cost>50group by category;

   having 分组后结果中条件,having写在group by 后面

      select category,count(category) from book where cost>50group by category having category=‘文学类’;

     

7.排序:放在最后

   order by 列名

   升序:asc(默认的)

   降序:desc

   order by cost;order by cost desc;

   select * from book where cost>20 order by cost;

   select category,sum(cost) from book gorp by category;

   select category,sum(cost) from book gorp by category order bysum(cost);

 

顺序:select/from/ where/ group by/ having/ order by

 

8.多表查询:

  内联:

    select 表.列名 from 表,表2 where 两个表连接的条件 and 查询条件

   select member_name,issue.book_code,category from book,mamber,issuewhere member.member_code = issue.member_code and book.book_code =issue.book_code and issue_date =      

   '2012-1-12';

 

   select member_name,book_code,issue_date,return_date fromissue,member where member.member_code = issue.member_code;

 

   select member_name,book_code,issue_date,return_date fromissue,member where member.member_code = issue.member_code and issue.member_code= 'M001';

 

   select issue.book_code,category from book,issue whereissue.book_code = book.book_code and member_code = 'M001';

 

 

select * from 表名 where 列名 in/not in (范围);

 

 

insert:插入

insert into 表名(列名,列名) values(值1,值2);

   列的个数与值的个数完全一致

   插入一一对应

insert into 表名 values(值……);

   没有指明列,说明表中所有的列

   值的个数与表中定义的个数完全一致

 

update:修改

   update 表名 set 列名=新值 where(行条件);

   update 表名 set 列名=新值,列名=新值 where 行条件;

 

delete:删除

   delete from 表名---删除表中所有数据

   delete from 表名 where 行条件

 

DCL,TCL

  

数据类型:

integer

float

double

decimal

varchar(长度)--可变字符

char--(长度)

datatime

 

SQLite--轻量级

Integer

real--实数float,double

null

text--文本varchar/char

当使用数据类型,可以不指明数据是什么类型,自动转换

 

 

 

 

 

 

Android数据存储方式:

1.SharePreference:保存的数据类似于配置信息的格式一XML方式保存

Key_value

getXXX(String key,XXX default);XXX

editor();SharePreference.Editor

写入数据:

SharePreference中内部类 Editor

Clear();清空所有数据

putXXX(String key,XXX values)

commit()当Editor编辑完后,提交写入文件

使用:得到SharePreference实例

   context.get SharePreference(String fileName,int mode);

   MODE_PRIVATE只能本应用程序读写

   MODE_WORLD_READABLE:其他应用程序可读

   MODE_WORLD_WRITEABLE:其他应用程序可写

 

写入: 1 得到对象

      This. get SharePreference(String fileName,int mode);

      2得到编辑对象

SharedPreferences preferences=getSharedPreferences("test",MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE);

SharedPreferences.Editor editor = preferences.edit();

      3putXXX方法写入内存

      String name=etName.getText()+"";

      editor.putString("name", name);

      4提交数据

      editor.commit();

读出: 1得到对象

      2读出

存储:\data\data\packname\shared_prefs|..xml

文件存储:

Android 上下文中(Context

1.openFileInput(String name):FileInputStream;

2.openFileOutput(String name,int mode):FileOutputStream

3.mode

MODE_APPEND 文件追加

 

其他应用程序可读可写文件

1.得到SharePreference实例,不是通过自身上下文

 

 

 

 

SD卡:

1.是否存在:Environment.getExternalageState();:String

   Enviroment.MEDIA_MOUNTED

2.获取SD卡目录:

Java.io.file

Environment.getExternalStorageDirectory();File

3.路径:

file.getCanonicalPath()

 

 

 

事物特性:

1.原子性:事物的完整性,要么全部完整,要么全部不做

2.一致性:看到内部是一致的

3.独立性:(隔离性)

4.持久性:永久存储

 

连接数据库-----文件

SQLiteDataBase----代表数据库

   Static openOncreateDatabase(……)打开或者创建一个数据库

   真正创建数据库,在第一次使用表

execSQL(String sql)--创建表,删除表,插入表,修改表

查询---rawQuery(String sql,String[] args):Cursor

   Cursor—----结果集

 

 

 

 

ContentProvider不同的应用程序之间进行数据交换

         标准API

         Uri形式对外提供数据

         Insert,update,delete,query。

ContentResolver:---- 提出请求uri(网址)

Content.GetContentProvider():

1.自定义一个ContentProvider  子类继承ContentProvider

2. AndroidMainfest.mxl注册----起域名

如果产生ContentProvider对象,直接请求所有的注册的ContentProvider

    onCreat()

http://www.google.com.hk

协议//域名

Android url

Content://authority/数据资源

 

工具类:公开Uri

       公开表中的列名

UriMatcher:工具类:实际要完成的工作,由子类匹配

         addURI(,数据资源,code) 注册uri资源

         match(uri):int 返回资源编号

 

 

1. 自定义已个Provider,继承与ContentProvider

2.AndroidMainfest.mxl注册----起域名authorities

3.在自定义的Provider中使用UriMatcher,注册内部Uri,使资源和编码相对应

4.完成insert,update,delete,query方法(重写)

5.提供一个工具类-----公开Uri

 

 

ContactContract.Contacts.CONTENT_URI    联系人

ContactContract.Contacts.CommonDataKinds.Phone.CONTENT_URI

 

 

 

 

线程:

Thread:start()---自动调用thread中的方法run()

主线程:UI线程Activity

子线程中不能够修改主程序View

 

子线程与主线程通信,中间对象传递数据

Handler

Message

   What:int

   Arg1:int

   Arg2:int

   Obj:

   setDate(date):

handler.sendEmptyMessage(int);子线程没有任何内容传递给主线程

handler.sendMessage(Message);子线程有内容放在msg中传递给主线程

接收:

handleMessage(Message):如果没有内容传递

如果有定义的线程运行处理

1.继承于Thread重写Run()方法

2.实现Runable接口  handlerMessage用于接收子线程消息的

 

主线程中不要处理耗时的工作-----否则没有响应、异常,主线程将关闭

   主线程事件

只有主线程才能更改UI界面,主线程调用handleMessage()修改界面

 

Thread thread = new Thread(new Runnavle){});

Thread Handler

 

 

MyAsycnTask extendsAsycnTask<Integer,Integer,String>

   在主线程中认为启动(execute()),工作只做一次

   子线程在后台运行,子线程完成工作后,可讲结果返回给主线程

 

doInBackground 后台完成的cn.com.iotek工作

   读取网络文件

   网络连接

   从数据库读取内容

 

从文件中读取一行显示到ListView

 

 

 

 

 

 

 

 

 

 

 

 

泛型:

1. 后台运行所需参数的类型,后台运行时,可变数组

2. 后台运行进度的类型

3. 完成工作后返回结果的类型

完成工作:

1.Params此参数的个数可以是0-N,整形数据

2.return 泛型中所指定的返回类型

 

 

 

 

 

 

2D绘图

基于Canvas

1. 继承与View,产生自己的空间view

2. 重写onDraw()方法,显示过程中自动调用的方法

 

Canvas:画布

      DrawXXX(……)

Paint:画笔

      setColor(int)设置颜色

      setStyle(Style)设置风格

      setTextSize(float)设置字体大小

      setAntiAlias(boolean)设置是否抗锯齿

      setShader(Shader)设置填充风格

      setStrokeWidth(float)边框宽度

基于View绘图的限制:缺少了双缓冲机制

    当程序需要更新View图像时,必须全部重绘

 

 

 

SurfaceView绘图:

SurfaceHolder

surfaceView.getHolder:SurfaceHolder

surfaceHolder.lockCanvas():Canvas:锁定画布

surfaceHolder.unlockCanvasAndPost(canvas):解锁提交画布

去生成自定义的控件:

继承于SurfaceView,实现SurfaceHolder.CallBack接口

 

1. 得到一个SurfaceHolder对象,添加addCallBack(…)监听者

2. 得到后台的Canvas

3. 通过CallBack中surfaceCreate使控件在创建时直接显示绘制内容

 

SurfaceView可在子线程中直接更新内容,双缓冲机制,绘制不在主线程中,

 

动画元素比较多,定时控制动画元素

不希望全部刷屏  

//避免被下一次lockCanvas遮盖

         holder.lockCanvas(new Rect(0, 0, 0, 0));

         holder.unlockCanvasAndPost(canvas);

 

 

Drawable

 

 

动画:

Frame:----帧动画

1. 列出所有的图片---Xml文件,放在资源下面/res/anim

<animation-list>

<item android:drawable = “”android:duration=“”/>

</ animation-list >

 

2. 动画启动放映

AnimationDrawable:得到对象

Image.getBackground():Drawable 强转为AnimationBackground

start() stop()

 

Tween :补间动画

开始帧---------结束帧(中间的由计算机补)

Animation 动画类(抽象类)

AlphaAnimation---透明度0-1

ScaleAnimation  缩放 X-Y 1 0

RotateAnimation  旋转 角度,360°

TranslateAnimation 位移

格式,动画资源。Xml

1.放在anim文件下

<set>

<slpha

Android:fromAlpha=””

Android:toAlpha=””

Android:duration=””>

</set>

AnimationUtils.loadAnimation:加载动画

Image.startAnimation(…);

布局动画:

1.动画资源

2.有一个与布局关联Xml媒介文件

Anim

<layoutAnimation

Android:delay=”..%”

Android:animationOrder=”reverse”

Android:animation= “@anim/动画资源”/>

3.在控件中加入

Android:layoutAnimation=”@/anim/媒介文件”

 

视图动画(自定义动画)

继承与Animation产生子类

 

Initialize(初始化)---可设置是否延迟,运行速度……

 

完成变换

applyTransformation(float,Transformation t);

得到变换器:Matrixmatrix  = t.getMatrix();

          Matrix.setScale(interploatedTime,interploatedTime);

          Super.applyTransformation(interploatedTime,t);

图片

res/drawable/../

动画图片

res/anim/

 

 

 

 

 

GET:数据以首部传输

POST:以主题传输

Service-----ConnectivityManager

   getSystemService

得到ConnectivityManager对象:

ConnectivityManager   CM =  (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);

   NetworkInfo info = cm.getActivityworkInfo();

访问网络资源:

URL————统一资源定位器,指向网络中资源的指针

Protocol://host:port/resourceName

http://www.baidu.com

htttp://192.168.11.8:8080/TestWeb/

URI…………

   getFile():String 资源名

   getHost():String 主机名

   getPath();String

   getPort():int

       getPortocol():String

   getQuery():String 查询字符串

 

openConnection():URLConnection

   openStream():InputStream

如果需要访问网络资源……加授权

 

 

 

URLConnection……与应用程序与URL之间通信连接

                可发送请求,读取资源

1. 创建URL对象

2. 通过openConnection()得到URLConnection

      URLConnection conn =url.openConnection();

3. 发出请求:

a. GET 使用connect()方法

conn.connect()

b. POST 首先对应的输出,放入主体,发送请求

setDoOutput();

setDoInput();

 

 

HttpURLConnection

URLConnection子类

增加了用于操作HTTP资源方法

getResponseCode():int 获取服务器的响应代码

 

 

 

HttpClient

1. 创建HttpClient对象

2. 创建HttpGet对象

3. 设置参数

4. HttpClient执行execute(get):HttpResponse

getEntity()

 

 

WebView

 

 

 

 

 

 

 

1. 控件……所有的控件都是派生于View

View ViewGroup

.mxl 布局

<控件名

Android:layout-width

Android:id

/>

View.setLayoutParams(…)

onCreate(){

   TextView tv = new TextView();

   addView(tv);

ctl.setText(...);了解属性、方法、时间-----API

}

Eg:

CheckBox chk;

Chk.ischecked(是否被选中,一般以 .is..开头)

标签:TextView

按钮:Button

图像:ImageView  

字段:EditView

复选框:CheckBox

单选框:RadioButton

 

 

重点和难点:ListView

选择控件ListView,Spinner,GridView,   

适配器:

ArrayAdapter

SimpleAdatper

SimpleCursorAdapter:

 

BaseAdapter:

   getView做显示-----要重写

适配器的优化:

   持有者模式:持有者类

            findViewById(...);

   class MyAdapter extends ArrayAdapter<>

      重写构造方法

      Public View getView(int position,ViewconverView—项视图,ViewGroup parent)

         View row = converView;

         If(row = null)---得到控件,即重新加载

         Else 通过持有者得到控件

 

菜单:记得在activity中重写上下文菜单

你可能感兴趣的:(常用知识点)