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下一页
您需要登录后才可以回帖 登录 | 加入黑马