Android Day04-网络编程

一、网络编程的核心步骤

(1)在清单AndroidManifest.xml文件中添加INTERNET权限。

(2)连接到网络地址的代码

第1步:创建URL

        String path = "http://192.168.17.98:8080/img/news.xml";
        URL url = new URL(path);

第2步:通过URL获得连接HttpURLConnection

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

第3步:通过HttpURLConnection连接设置一些请求的参数

        conn.setRequestMethod("GET"); //默认请求方式就是GET,要大写。
        conn.setConnectTimeout(5);   //链接网络超时时间,秒作单位。

第4步:请求响应并获取服务器的响应码,判断响应码的状态,采用相应的动作。

        int code = conn.getResponseCode(); /*200  代表获取服务器资源全
                                                 部成功 206  请求部分资源*/ 
                if (code == 200) {
                   //解析连接的输入流,获取数据,进行其它操作。 
                  ...
                }

二、Android中的消息机制

在Android4.0之后,google工程师强制要求Android中的耗时操作(如上面的网络访问、拷贝

大的数据)放在子线程中运行,否则程序在运行时就会报下面这个错误:

android.os.NetworkOnMainThreadException 在主线程访问网络

然而,在子线程中往往会有更新UI的操作(如改变activity中的组件的text值),但是更新UI

的操作只能在主线程中完成,如果在子线程中有更新UI的动作,程序就会报以下错误:

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original

thread that created a view hierarchy can touch its views. 只有主线程才可以更新ui

这样就形成了矛盾,那么如何解决这一矛盾呢?解决办法:有2种方式:

第1种:消息机制Handler

1)在类的成员位置上创建一个Handler对象,复写它的handleMessage(Message msg)方法。

在这个方法中获取子线程传递过来的Message,然后更新UI。

            //创建助手Handler   
            private Handler handler = new Handler(){
		public void handleMessage(aMessage msg) {
		   //获取消息的类型  
			switch (msg.what) {
			case LOADSUCESS:    //代表获取数据成功
			   //把数据取出来 
				String content =  (String) msg.obj;    //要强转
			   //显示源码的内容
				tv_content.setText(content);
				break;
			case LOADERROR:     //代表获取数据失败 
				Toast.makeText(getApplicationContext(), "访问的资源不存在
				", 1).show();
				break;
			case LOADEXCEPTION:
				Toast.makeText(getApplicationContext(), "服务器忙!!!", 1)
				.show();
				break;
			}

		 };
	     };

2)在子线程中调用Handler对象的sendMessage(Message msg)方法,将获取的数据封装到

Message中去。

            //创建message对象
		  Message msg = Message.obtain();    //这种方式得到Message对象,可以减少
		                                      创建Message的次数。还可以new个对象
		  msg.what = LOADSUCESS;    //标记Message的类型,int型。

		  msg.obj =content;    //这个属性可以携带任何数据类型

	    //发送一条消息  告诉系统我要更新ui handleMessage方法会立刻执行
		  handler.sendMessage(msg);
时间: 2024-10-13 21:26:31

Android Day04-网络编程的相关文章

Android 的网络编程

android的网络编程分为2种:基于socket的,和基于http协议的. 基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s = svr.accept(); 取得输入和输出 DataInputStream dis = new DataInputStream(s.getInputStream()); DataOutputStream dos = new

Android利用网络编程HttpClient批量上传(一个)

请尊重他人的劳动成果.转载请注明出处:Android网络编程之使用HttpClient批量上传文件 我曾在<Android网络编程之使用HTTP訪问网络资源>一文中介绍过HttpCient的使用,这里就不在累述了,感兴趣的朋友能够去看一下.在这里主要介绍怎样通过HttpClient实现文件上传. 1.预备知识: 在HttpCient4.3之前上传文件主要使用MultipartEntity这个类,但如今这个类已经不在推荐使用了. 随之替代它的类是MultipartEntityBuilder. 以

Android中网络编程以及与服务器上Web项目的基础交互

该博文中内容通过老师上课的内容对于Android下的网络通信编程等内容进行总结: 1.Android网络编程初识 2.Android实现HTML源码查看 3.Android实现网络图片查看 4.Android实现与服务器上JavaWeb项目交互 1.Android网络编程初识 Android手机终端作为客户端发送Http请求到终端服务器上,并且当发送请求到服务器,如果请求成功,响应码:200:服务器会通过客户端返回请求并且处理后的信息数据,一般情况下,在正式项目中多用JSON,不会使用没有规定格

android之网络编程

注意: (1)主线程不能够做耗时的操作,网络请求就是耗时的操作需要放到子线程做. (2)子线程不能更新控件的内容(更新Ui).所以产生了矛盾,解决办法就是使用Handler(处理消息机制). Handler:消息机制的写法(重要)  使用Handler的步骤: 1.主线程中创建一个Handler private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { }; }; 2.

Day04——网络编程(一)

网络图片查看器 确定图片的网址 发送http请求 URL url = new URL(address); //获取连接对象,并没有建立连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置连接和读取超时 conn.setConnectTimeout(5000); conn.setReadTimeout(5000); //设置请求方法,注意必须大写 conn.setRequestMethod("GET&q

Android网络编程网上文章总结

关于网络编程,网上也有许多好的文章,这里我就选了几篇觉得不错的归纳到了一起,仅供参考 Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数

漫谈Android网络编程

Android从业者,十之八九都是在做网络应用,不是互联网也是局域网.如今在4G和Wifi的天下下,流量什么的都已是浮云,单机应用的市场已然悄悄的一去不复返了.所以呢,不了解网络请求的同学要小心了,当心被时代的大浪一个浪头排在沙滩上. Android实现网络编程有HTTP.也有Socket.HTTP协议是应用层协议,主要解决如何包装数据,网络应用都会用到的协议:Socket是TCP/IP协议的封装,主要解决数据如何在网络中传输,常用于与服务器保持长连接,一般用于广告推送.实时聊天.在线游戏等.

Android网络编程 知识框架

http://blog.csdn.net/wolf09311/article/details/41012379 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.* 提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及 URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数据等通信.这些在 Java

Android网络编程概述

Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数据等通信.这些在Java网络编程中均有涉及. b) Org.apache接口 对于大部

[转载]Android网络编程(一)

Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数据等通信.这些在Java网络编程中均有涉及. b) Org.apache接口 对于大部