A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 allen927 于 2015-11-1 16:40 编辑


同样的课程、老师、就业,更好的学习环境,更低的学习成本!
内地学员,选择长沙校区,靠谱!!!
报名热线:0731-85833115
  QQ  : 2355535415

android基础Day04(网络交互)


《 如果感觉今天的知识点都会了,可以直接做作业,来进行检测》

(了解)主题
主题:theme
     控制Application  或者 Activity的显示   
AndroidManifest.xml就可以看见

android系统的主题定义:adt-bundle-windows-x86\sdk\platforms\android-10\data\res\values\themes.xml

定义一个全屏的主题:
1 没有标题   2 没有状态栏




源码开发  手机定制   
三方应用开发:一般都是使用系统自带的主题。

(掌握)动画

animation:动画
1 Tween :补件动画   (动画)
2 Frame:帧动画(图片资源  一组图片在执行切换)

   1 Tween

alpha:透明度改变
scale:缩放动画
transalte:移动动画
rotate:旋转动画

1 xml配置
2 java代码编程








动画的集合
把所有的动画配置给set节点


   2帧动画
帧动画:他是图片资源
一组图片的集合  正在进行图片的切换








(了解)国际化
android里面的国际化基于配置的i18n
1 图片的国际化
2 文字的国际化

   1 图片的国际化

   2 文字的国际化

国际化一般都是放置在最后进行处理。



(了解)网络交互的原理
怎样才能和服务器进行交互?
使用网络协议:HTTP   TCP/IP   TCP/UDP   ....SOCKET
通过网页和服务器进行交互:网页应用程序封装了Http协议。
Http协议:超文本传输协议
请求+响应来组成:有求必应
HTTP请求消息中,请求方式有GETPOSTHEADOPTIONSDELETETRACEPUTCONNECT八种。
而在以后们最常用的有两种请求方式:POST请求、GET请求。
get请求和post请求的区别?
get请求:他的数据是携带在url的后面   服务器对于url的长度是有限制的。2kb  4kb ...这里是可以在服务器动态配置的
post请求:把数据封装在请求实体里面。

请求:
   请求头:header
   请求体:entity

响应:
   相应头
   相应体

客户端请求服务器的过程:



(掌握)Android网络编程API
android手机看成一个浏览器。去执行网络请求。
就需要使用Http协议来编程,使用api
android给我们提供了什么样的网络api.

网络地址

把一个路径包装成一个网络地址
打开连接

连接对象

   设置网络超时时长
设置请求的方法
获取响应码
获取服务返回的数据


(掌握)网络图片查看器
    在服务器上一一张图片,使用android手机来显示
    1 看服务器的资源是否可以正确的访问

联网是需要权限







主线程不能联网:4.0开始系统设置。
在主线程是不能执行联网操作。
原因:
1 联网一定是一个耗时的操作
2 主线程是负责界面的显示:主线程不能阻塞  
如果主线程被阻塞:用户的行为5s内无法被系统响应。就会导致一个异常:ANR application not response  

以后联网那就需要记住操作:
1 开线程   new Thread(){run(){}}.start()
2 添加联网权限

(掌握)子线程不可以直接操作UI
只有主线程才能操作显示

(掌握)消息机制常见类介绍





(掌握)网页源码查看器


(掌握)消息处理常见API





(掌握)消息处理的原理
Handler:消息处理器    发送消息   处理消息
Message:消息    what  obj   arg1  arg2  callback:Runnable接口   target:目标  Handler  when:消息发送的时间
MessageQueue:消息队列    临时存储消息  
Looper:消息泵    从消息队列里面抽取消息
HandlerThread:消息处理的线程   一个执行的线程:场所
消息


(掌握)网易新闻客户端案例
从服务器上获取数据然后列表显示
服务器上:提供一个网络地址:提供一个xml文件
android客户端:列表显示  ListView   + Adapter



(了解)smartimageview的使用
smartimageview:智能   ImageView  他使用框架  
www.github.com  开源的网站。。。






(掌握)smartimageview的原理
1 线程  Thread  
2 URL + HttpURLConnection
3 Handler + Message



(掌握)get方式提交数据
[size=29.3333339691162px]


        /**
         * 使用Http协议 以GET请求提交数据到服务器
         * @param map 数据
         * @param path 请求路径
         * @return
         * @throws Exception
         */
        public static boolean doHttpGet(Map<String, String> map, String path) throws Exception{
                //特点:http://localhost:8080/web/LoginServlet?name=itcast&pwd=234
                //拼接uri
                StringBuffer sb = new StringBuffer(path);
                sb.append("?");
                for(Map.Entry<String, String> entry:map.entrySet()){
                        String key = entry.getKey();
                        String value = entry.getValue();
                        sb.append(key).append("=").append(value);
                        sb.append("&");
                }
                //删除最后一个&
                sb.deleteCharAt(sb.length()-1);

                URL url = new URL(sb.toString());
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5000);
                if(conn.getResponseCode() == 200){
                        //获取服务器回送的流数据
                        InputStream inputStream = conn.getInputStream();
                        //返回 success  or  error
                        String content = changeStreamToString(inputStream);
                        if("success".equals(content)){
                                return true;
                        }else{
                                return false;
                        }
                }
                return false;
        }
(掌握)post方式提交数据到服务器
不会把参数带在url的后面
把参数放在请求实体里面
请求头
POST /web/LoginServlet HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://localhost:8080/web/
Accept-Language: zh-CN
浏览器的内核信息
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2)
提交的数据类型
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
提交数据的长度
Content-Length: 19
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=0D35C904B671C07943E0B9F374F2A162

实体内容
name=itcast&pwd=123


服务器响应的信息
HTTP/1.1 200 OK     状态行    状态码
Server: Apache-Coyote/1.1
Content-Length: 7
Date: Mon, 19 Jan 2015 08:05:00 GMT

success

执行Post请求的要求:
1 HTTP协议 客户端默认是不能提交数据到服务器  必须手动的开启 允许  对外输出
2 请求头里面必须要有Content-Type  Content-Length属性


        /**
         * 使用Http协议 以POST请求提交数据到服务器
         * @param map 数据
         * @param path 请求路径
         * @return
         * @throws Exception
         */
        public static boolean doHttpPost(Map<String, String> map, String path) throws Exception{
                //特点:数据是在请求实体里面
                //拼接实体   name=itcast&pwd=123
                StringBuffer sb = new StringBuffer();
                for(Map.Entry<String, String> entry:map.entrySet()){
                        String key = entry.getKey();
                        String value = entry.getValue();
                        sb.append(key).append("=").append(value);
                        sb.append("&");
                }
                //删除多余的&
                sb.deleteCharAt(sb.length()-1);
                //实体
                byte[] entity = sb.toString().getBytes();

                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("POST");
                conn.setConnectTimeout(5000);
                //运行对外输出
                conn.setDoOutput(true);
                //请求参数
                //提交数据的类型
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                //实体的长度
                conn.setRequestProperty("Content-Length", entity.length+"");
                //把实体数据对外输出
                OutputStream outputStream = conn.getOutputStream();
                outputStream.write(entity);

                if(conn.getResponseCode() == 200){
                        //获取服务器回送的流数据
                        InputStream inputStream = conn.getInputStream();
                        //返回 success  or  error
                        String content = changeStreamToString(inputStream);
                        if("success".equals(content)){
                                return true;
                        }else{
                                return false;
                        }
                }
                return false;
        }

(掌握)httpclientgetpost
HttpClient:他是android集成的一个三方框架 Http框架
HttpClientURL  HttpClient再次进行了oop的封装
HttpClient:他就是一个浏览器  
执行请求  回送响应
HttpClient:浏览器   方法:执行  响应 HttpReponse exeucute(请求HttpUriRequest)















        /**
         * 使用HttpClient框架 以GET请求提交数据到服务器
         * @param map 数据
         * @param path 请求路径
         * @return
         * @throws Exception
         */
        public static boolean doHttpClientGet(Map<String, String> map, String path) throws Exception{
                //特点:http://localhost:8080/web/LoginServlet?name=itcast&pwd=234
                //拼接uri
                StringBuffer sb = new StringBuffer(path);
                sb.append("?");
                for(Map.Entry<String, String> entry:map.entrySet()){
                        String key = entry.getKey();
                        String value = entry.getValue();
                        sb.append(key).append("=").append(value);
                        sb.append("&");
                }
                //删除最后一个&
                sb.deleteCharAt(sb.length()-1);
                //浏览器
                HttpClient httpClient = new DefaultHttpClient();
                //get请求对象
                HttpGet request = new HttpGet(sb.toString());
                //执行请求
                HttpResponse response = httpClient.execute(request);
                //判断响应码是否为200
                if(response.getStatusLine().getStatusCode() == 200){
                        //获取服务器回送的流
                        InputStream inputStream = response.getEntity().getContent();
                        //返回 success  or  error
                        String content = changeStreamToString(inputStream);
                        if("success".equals(content)){
                                return true;
                        }else{
                                return false;
                        }
                }
                return false;
        }


post请求
        /**
         * 使用HttpClient框架 以POST请求提交数据到服务器
         * @param map 数据
         * @param path 请求路径
         * @return
         * @throws Exception
         */
        public static boolean doHttpClientPost(Map<String, String> map, String path) throws Exception{
                //post请求:请求实体
                HttpClient client = new DefaultHttpClient();//浏览器
                HttpPost request = new HttpPost(path);//post请求对象
                //实体参数
                List<NameValuePair> parameters = new ArrayList<NameValuePair>();
                for(Map.Entry<String, String> entry:map.entrySet()){
                        String name = entry.getKey();
                        String value = entry.getValue();
                        NameValuePair nvp = new BasicNameValuePair(name, value);
                        parameters.add(nvp);
                }
                //实体
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8");
                //把实体设置给请求对象
                request.setEntity(entity);
                //执行请求
                HttpResponse response = client.execute(request);
                //判断响应码是否为200
                if(response.getStatusLine().getStatusCode() == 200){
                        //获取服务器回送的流
                        InputStream inputStream = response.getEntity().getContent();
                        //返回 success  or  error
                        String content = changeStreamToString(inputStream);
                        if("success".equals(content)){
                                return true;
                        }else{
                                return false;
                        }
                }
                return false;
        }

作业:

下载资源

Doc笔记
课程视频代码
作业视频代码
相关链接:
长沙中心--黑马双元课堂JAVA入学辅导班1期火爆开班啦!!!
长沙黑马程序员学习激情无限“吊炸天”
黑马程序员长沙校区生活圈,60秒搞定吃住学
http://bbs.itheima.com/thread-243108-1-1.html


59 个回复

倒序浏览
感觉很厉害的样子,我来试试......
回复 举报
来看看,很厉害的样子
回复 举报
赞,虽然还不懂
回复 举报
6666666666666666666666
回复 举报
留着点招完了看
回复 举报
z_one 中级黑马 2015-11-4 16:21:10
7#
试试学习一下
回复 举报
窝牛。 来自手机 中级黑马 2015-11-4 17:33:21
8#
留着用,楼主好人,一生平安
回复 举报
挺起!!!!!!!!!!!!!
回复 举报
马上就要学这个了..
回复 举报
鸡锅,又来顶贴了
回复 举报
学JAVA的笔记呢 ?
回复 举报
好复杂。。。等就业班学
回复 举报
非常厉害。。大神
回复 举报
来瞻仰大神来的
回复 举报
提前了解了解,谢谢分享
回复 举报
支持基哥  
回复 举报
赞一个1111111111111111
回复 举报
技术贴学习一下
回复 举报
加油!为了明天!
回复 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马