安卓整理笔记.docx
《安卓整理笔记.docx》由会员分享,可在线阅读,更多相关《安卓整理笔记.docx(13页珍藏版)》请在冰豆网上搜索。
安卓整理笔记
安卓应用也是由java写的dvm
.java-----.class----.des=====.apk
开发java是基于jdk开发安卓是基于Sdk-------目录
Platform-toolsdx.bat(.class----.des)
Aapt.exe(安卓应用的大包国家)
Adb安卓调试桥
怎么下载的sdkmanager
点击sdjmanager弹出框框,所有安卓的平台。
Google封
如何真机调试:
手机安卓手机助手,华为手机助手,手机用数据线连上,自动的下载驱动,自动连到eclipse上会列出来。
Android4.4下面都是jar包提供了所有的安卓的开发工具sdk-manager好多类
4.0===14
4.1.2-----16
Application当前应用
@R文件
Activity启动的时候就会走oncreate方法
SetContentView设置activity的内容,来自于布局文件
找到关心的控件
findViewById
给按钮设置点击事件
Btn_call.setOnClickListener()
定义一个类去实现当按钮点击需要的接口类型
PrivateclassMyClickListenerimplementsOnClickListener{
//@override
PublicvoidonClick(Viewv)
}
获取文本内容
Et_number.getText().toString()
按钮的点击事件,声明一个方法和要点击的按钮在布局中声明的onclick属性一样
Publicvoidclick(Viewv){
}
}
getContext(拿到上下文对象).。
getClass(字节码).getMethod(反射handlerName,View.Class)
布局中的所有属性都封装到了AttributeSet类中
表格布局:
TableLayout
TableRow代表一行,一个控件代表一列
自己生产xml
自己组拼stringBuffer,手机里面的数据取出来通过xml文件备份起来
取出数据
第一步集合里面存xml,第二步吧sms对象加入集合中,想要备份的数据就封装到集合中了。
第三步集合中数据放到生产的xml里面。
数据的路径Filefile=newFile()第四步开始写数据FileOutputStreamfos=newFileOutputStream(file)
Javabean固定写法生产getset方法
Xmlserializer接口类可以序列化xml文件获取Xmlserializer类实例,通过xml工具类去获取Xml.newSerializer();第二步生产的xml存到一个位置上通过serializer.setOutput(os,encoding)存到一个位置上。
第一个参数就fileoutputStream继承outputStream,编码方式
startDocument开始写头文档endDocument开始写文档结尾。
写文档的根节点startag(namespace,name)命名空间没有xmlns,跟节点的名字。
循环写sms节点遍历集合
Serializer.text(sms.getAddress())数据在xml里面
安卓把关心的数据取出来
服务器把数据准备一个xml返回给客户端
服务器是以流的形式把数据返回
List<>泛型存把对象封装成一个javaBean,channel作为一个javaBean对象,参数id
parserXml(InputStreamin)服务器以流的形式把数据返回就接受一个流。
解析逻辑
解析xmlPullParseXml.newPullParse静态方法获得解析器。
DOM解析原理把整个文档解析,类似于SAX解析一行一行的解析先解析文档的开头,基于事件进行解析事件就是一个int类型值是1还是2。
开始标签/结束节点。
Parser.setInput(in,)接受一个流。
官方文档拿到工厂类XmlPullParserFactory.newInstance()拿到实例。
InteventType=xp.getEventType()拿到事件类型,有好多时间类型,开始是一个时间类型,结束也是一个事件类型。
While循环不等于文档结尾不停往下走。
取数据得到判断xp.next()XmlPulParserxp=factory.newPullParser()。
解析到开始标签创建一个javaBean对象取数据把id取出来。
取出标签的名字xp.getName。
在里面创建一个集合对象,parser.getAttribute0代表取出第一个属性的值,把id取出来之后放到javaBean中setId(id)
parser.getText()获取city数据
通过上下文可以获取资产的管理者,上下文中mainActivity最终就继承context。
返回一个inputStream流。
调用定义的xml业务方法。
调业务方法返回一个集合,要组拼一下。
Sb.append(channel.toString())把数据组拼到append中
把数据展示到textV上tv_weather.setText(sb.toString())
Xml解析的步骤
1.获取xmlPullParser类的实例,通过工厂类
2.设置xmlPullParser的参数parser.setInput(in,“utf-8”)
3.获取解析文档的事件类型inttype=parse.eventType
4判断解析的是哪个标签,开始标签结束标签
ListView就是为了展示垂直滚动的条目
Item来自于listAdapter,实现接口就要实现里面未实现的方法getcount
ViewgetView(intpositio,ViewconvertView,viewGroup)
Tv=newTextView(MainActivity.this)历史缓存对象等于空创建一个新view对象
获取一个view作为listView的一个条目出现
Returntv要一个view返回一个view
数据适配器定义好要显示出来,lv.setAdapter(newMyListAdapter())已经定义好了
、
Adapter适配器复制把数据展示到listView上
Servlet复制把数据展示到jsp上
listView高用填充父窗体match-parent
BaseAdapte复杂的item既有图片又有文字还能点,都是VIew可以先把item做一个布局出来,
在getView中把自己定义的布局转换成view对象
创建新的view对象View.inflate(context,resource,root)
可以吧一个xmlresource资源转换成view,context=this,getApplication,resource我们定义的布局文件R.layout.item、
linearLayout继承VIewGroup使用的不都继承viewGroup,把布局转换成view对象可以加到viewGroup里面一般用不上。
获取打气筒
LayoutInflater.from(getApplication()、inflate)
获取打气筒服务
getSystemService(LayOut_inflater_service)
ListAdapter就显示普通的文本信息没有必要用Baseadapter
ArrrayAdapter显示数组或者普通的文本
Adapter作用就是把数据展示到listView上
1找到关心的控件
ListViewlv=findViewById(R.id.lv)
2ArrayAdapteradapter=newArrayAdapter(this,R.LAYOUT.ITEM.object)
3设置数据适配器lv.setAdapter(adapter)
textViewResourceId用哪个Item显示上数据的内容
simpleAdapter用把数据库中的数据查询出来展示到数据库上数据用map封装的正常企业开发使用javaBean封装数据的
SimpleAdapteradapter=newSimpleAdapter(getApplicationContext(),data,resource,from,to)
Data是一个LIst里面还要放一个Map
集合里存msp创建map
Map.put(“name”“张三”)map里面存一点数据
把map方法到集合中data.add(map)
Resource就是布局
用什么布局能显示出数据textView
From里面就是map集合的键值
TotextView的Idint类型的
4设置数据适配器的内容
lv.setAdapter(adapter)
数据库
1.cursor.getString(0)代表列的索引把数据封装好后显示。
拿到name和phone
2.把封装的数据拿到数据封装到javaBean中定义一个JavaBean
3.把javaBean中的数据封装到集合里面personperson=newPerson()person.setName(name),用来存listView要展示的数据要展示personList
4.把javaBean对象加入到集合中展示lists.add(person),把listView要展示的数据都封装到集合中了
5.实现数据适配器getCountListS.size实现getView方法条目布局。
Inflate创建新的view对象把拿到的namephone展示到条目上找到控件展示数据findVIewByIdtv_name
6.如何显示数据setText(text)text内容在集合中存,取集合中取数据,第一个条目怎么取
第二个条目显示,取数据Personperson=lists.get(position);从0开始取到第一个条目,返回一个person对象因为集合里面存的就是person对象。
Tv_name.setText(person.getName())拿person去person中getName就可以了。
7.集合中有数据了lv.setAdapter(newMyAdapter())
只要做一个安卓应用肯定有界面
获取源码路径在路径下获取源码。
向XX服务器发送一个get请求,XX服务器就会返回数据
发送get请求HttpUrlConnection通过这个类可以向服务器发送get请求,用于发送和接受数据的。
用户名和密码提交到服务器就是发送,服务器,xml的数据是以流的方式返回的,是getInputStream返回的。
Urlurl=newUrl()URL地址指定服务器地址
Url类调用openConnection拿到累的实例get
HttpURLConnectionurlConnection=url.openConnection()
InputStreamin=urlConnection.getInputStream拿到这个数据,指定地址服务器以流的形式把数据返回回来。
In就是服务器哦返回来的数据。
把in数据显示到textView上,没有接受流的参数,所以要把流转换成字符串,常见的操作做成一个工具类了。
readStream(intputSreamin)方法这个方法里面接受一个流
Java里面读流写流的方法
Intlen=-1;
Byte[]buffer=newbyte【1024】1kb
不停地读
While(len=in.read(buffer)!
=-1)
里面有
把数据读出来了要写到哪里去
ByteArrayOutputStream内存输出流、读出来的内容都写到内存中去
Baos.write(buffer,0,len)写到len。
返回一个字符串
Sringcontent=newString(bao.toByteArray());
返回一个字节数组
Returncontent
联网权限intent
TextView没有滚动功能
消息机制
应用无响应机制在主线程进行了耗时操作。
自己创建线程自己定义一个类继承thread
第二个定义一个类实现run
在子线程中更新ui报错,只有主线程更新ui才能更新ui
在主线程中定义一个handler
Handlerhandler=newHandler({
重写方法
handleMessage(){//用来接收消息
Stringcontent=Msg.obj//在主线程中取数据
Tv_result(content)
}
})
不要在子线程更新ui
创建msg对象Messagemsg=newMessage();
Msg.obj=content;
handler.sendMessage(msg)需要msg对象,发了一个消息在子线程中,消息里面携带了把数据放到了msg,handleMessage方法就会执行。
(handleMessage在主线程创建的)所以就剋在主线程更新ui了。
主线程还有一个类looper主消息的循环器不断监视messagequeue把消息取出来交给handler处理。
重写了一个方法handlermessge方法最终这条消息被这个方法处理了。
有了主线程looper就有了,messagequeue。
紫瑶耗时操作,更新ui拷贝数据就要自己开一个子线程,获取数据后更新ui就要使用handler
图片bitmapFactory工厂类可以创建bitmap对象,参数接受一个流,Bitmaobitma
P=BitmapFactorydecodeStream(in),通过位图工程获取bitmap位图
把bitmap显示到lv上。
子线程lv是空间只要是空进更新ui都要在主线程进行。
要把bitmap放到消息里面。
Msg.obj=bitmapjava中任何都是object,返回的想携带什么就携带什么。
一发消息handleMessage就执行了BitMapbitmap=msg.obj
Lv.setImageBitMap(bitmap)
缓存图片就是流的读写操作。
Filefile=newFile()
FileOutputStreamfos
然后就是不停的度,然后写的操作‘’
读len=in.read(buffer)while不停的读读完后写到
Fos.write(buffer,olen)
服务器的数据通过数据库,servlet通过jdbc连接数据库把数据库中信息取出来,把服务器拿到的数据封装成xml格式返回给客户端,客户端解析xml把文件显示到手机上。
开发安卓应用
1画ui
2准备listView要显示的数据,数据在服务器,取服务器取数据。
封装到javaBean在封装到集合里再展示到listView中。
initListData()//准备listView的数据
取服务器取数据
Url地址是本来是localhost8080但是连接的是猎豹wifi所以是猎豹wifi的ipv4地址192.168.191.1
HttpUrlConnectionconn
getResponseCode==200
获取服务器的数据以流的信息返回inputStreamin=conn.getInputStream()
之后解析xml,获取解析器newXmlPullParser,之后设置解析器要解析的内容
Parser.setInputStream(in),获取时间类型,不停的向下解析。
如果解析到开始标签parse,getName创建一个list集合。
往下解析news.setTEXT。
把javaBean添加到集合中list.add(new)
最后返回集合就可以了returnlist;
在main中XmlParserUtils.parserXml(in)就给我们返回一个集合
拿到一个集合,把要展示的数据都放到了一个集合中,展示数据要数据适配器。
要实现一些方法
在getView中药拿到一个打气筒
找到控件要显示的数据
显示数据tv_setText(list.get(positon).getTitle())
不同的类型。
根据int类型Integer.parseInt(type)
Item
最后更新ui展示到listView上在子线程runOnuiThread
lv.setAdapter(newMyAdapter())
服务器返回数据发送数据
服务器接收数据客户端发送数据
Get方式提交和post方式提交数据
Servlet中有doget和dopost方法
Dopost方法
Request域
request.getParameter(“username”)获取客户端提交的数据
客户端返回的是
response.getOutputStream().write(“success”.getBytes())
http协议分为请求内容和相应内容
Get方式组拼url把数据组拼到url上有大小限制1kb--4kb
Post方式提交数据安全,数据不展示到url上,没有大小限制
form表单默认的方式就是get方式。
访问的路径流里面的数据是返回的是,满足条件返回。
conn.getInputStream()流的形式返回的数据
’
Post方式请求的方式通过请求体的方式把数据提交到服务器以流的形式
请求体的内容如何封装
多了2个头信息自己组拼请求体内容content-typecontent-length
添加请求头信息
conn.setRequestPropery(field,newValue)field请求头的key后面的是value就是里面的内容报错要求一个字符串加一个“”就变成了字符串
请求体
Stringdata=“username=abc&password=123”
把组拼好的数据提交给服务器以流的方式
Conn,setDoOutput(true)标记允许输出
Conn.getOutPutStream.write(data.getByte())以流的形式传输数据,输出就是写请求体,流的形式把数据写给服务器
服务器返回的状态码
拿到流信息InputStreamin
把流转化为StreamStreamTools
往服务器提交数据封装了一个类
HttpClient执行get请求和post请求
有execute方法(HttpUrlRequest)接受的参数是一个接口找直接子类
HttpGet
HttpPost
获取HttpClient实例
NewDefaultHttp()
执行一个get请求
HttpGetget=newHttpGet(path)执行get请求要一个路径
Client.execute(request)参数get
有一个返回值httpResponseresposne服务器返回的内容就在response中=Client.execute(request)
向服务器发送一个request服务器就会给你返回一个response
Code==200
获取服务器返回的数据以流的形式返回的
Response.get拿到流的信息以实体的类型返回的getContent是流
InputStream=response.getEntity().getContent();拿到inputStream就是服务器返回的数据
Post方式提交数据
post.setEntity(entity)键值对接收的参数又是一个接口
BasicNameValuePair(Stringname,Stringvalue)name就是key服务器取数据不是getParameter()中的键,封装到对应的值value就是用户输入的
接口UrlEncodedFormEntityentity=newUrlEncodedFormEntity(parameters)parameters类型就是list需要一个listValuePair。
Listlist=newArray>(),这个泛型里面存数据优势一个接口
找到了实现子类BasicNameValuePair
BasicNameValuePairnameValuePair=newBasicNameValuePair(“username”,name)key就是服务器的key,这个可以去取数据
Lists.add(nameValuePair)
Parameters就是lists
创建新的active定义一个类继承activity
onCreate当activity启动的时候调用在这个方法里面加载布局
setContentView在layout下找一个布局
启动的是谁清单文件里面有意图过滤器有action指定的是main是主入口的意思。
Launcher启动。
Google工程师帮我们配置好了
安卓应用有多个启动图片清单文件里面action必须是main,category附加的default只有一个了,必须是launche想让应用有多个启动图标acitvity需要配置
就有多个启动图标了
页面是系统自带的属于系统的就属于这个应用
隐式意图指定一组动作数据开启activity
Intent-filter意图过滤器,设置跳转的动作不用系统定义的用自己定义的
Action中的字符串
intent.setAction(“”)里面怎么写的这里就是复制的
显示意图
设置包名和类名
清单文件里面配置activity不用配置意图过滤器了,开启自己应用的界面用显示意图
进程当一个应用开启没有任何组件允许安卓就开启了一个新的进程给这个应用组件
并且带了一个线程这个线程就是主线程,安卓下四大组件都是允许在主线程中,任何一个组件都不能做耗时的操作都会产生anr异常
前台进程用户正在做一些事情,优先级最高不容易被杀死,用户正在交互
可视进程,相当于用户一直可见生命周期onpause失去焦点但是可见
播放一个音乐qq等等都会用到服务在backGround下载一些数据服务进程
服务
定义四大组件的方式是一样的
定义一个类继承service
onStart生命周期
onStartCommand
onDestory服务器穿件销毁
bindService(intent,conn,flag)开启服务的第二种方式绑定服务连接服务
Intent意图的作用连接到那个服务
Conn数据类型是serviceConnection实现接口类型implementserviceConnection
Flag常亮flag=Bind_AUTO_Create自动创建服务不存在的时候
bindService找不到相当于隐形的service
调服务的方法
服务内部
一旦连接到服务会走onBind方法返回值IBinder类型
定义中间人对象直接接触Binder
先走onCreate方法才