`

Android4开发入门经典 之 第十一部分:网络编程

 
阅读更多

基于Socket的网络编程

Android的网络编程部分,基本上和Java的网络编程是一样的,基本上也分成两种,一种是基于Socket的,另外一种是基于Http协议的。

基于Socket的基本用法,跟Java里面的用法一样,简单回顾一下:

一:服务端
1:启动一个服务器端的socket:ServerSocket server = new ServerSocket(1234);
2:开始侦听请求:Socket client = server.accept();
3:取得输入和输出流:
4:然后就可以通过流来进行网络传输了
5:最好要记得关闭流和Server

java代码:
  1. ServerSocket server=new ServerSocket(1234);    
  2. Socket client=server.accept();    
  3. InputStream in = client.getInputStream();    
  4. OutputStream out=client.getOutputStream();    
  5.    
  6. byte bs[] = new byte[1024];  
  7. in.read(bs);  
  8. String str= new String(bs);  
  9. System.out.println(str);    
  10. out.write("Server send".getBytes());    
  11. out.flush();  
  12. client.close();  
 
二:客户端:
1:发起一个socket连接:Socket server = new Socket("192.168.1.2",1234);
2:取得输入和输出流:
3:然后就可以通过流来进行网络传输了
4:最好要记得关闭流和Socket

java代码:
  1. String str = "client send";  
  2. out.write(str.getBytes());  
  3. out.flush();  
  4.    
  5. byte bs[] = new byte[1024];  
  6. in.read(bs);  
  7. System.out.println(new String(bs));  
  8. server.close();  
当然这样实现很不好,应该包装成上层的流或者Reader、Writer来做。

包装成Reader和Writer的服务端示例:

 

java代码:
  1. ServerSocket server=new ServerSocket(1234);    
  2. Socket client=server.accept();    
  3. BufferedReader in=   
  4. new BufferedReader(new InputStreamReader(client.getInputStream()));    
  5. PrintWriter out=new PrintWriter(client.getOutputStream());    
  6. String str=in.readLine();    
  7. System.out.println(str);    
  8. out.println("Server send");    
  9. out.flush();  

包装成Reader和Writer的客户端示例:


java代码:
  1. Socket server = new Socket("192.168.0.100"1234);  
  2. BufferedReader in = new BufferedReader(new InputStreamReader(  
  3. server.getInputStream()));  
  4. PrintWriter out = new PrintWriter(server.getOutputStream());  
  5. String str = "client send";  
  6. out.println(str);  
  7. out.flush();  
  8. System.out.println(in.readLine());  
  9. server.close();  

使用HttpURLConnection

基于Http协议的基本用法,可以使用HttpURLConnection,也可以使用Apache的Http操作包,具体的使用方式下面分别来示例。

要让应用使用网络,需要在Manifest文件中添加权限:


java代码:
  1. <uses-permission android:name="android.permission.INTERNET" />  
  2. HttpURLConnection默认使用get的方式与后台交互  
  3. HttpURLConnection conn = null;  
  4. try {  
  5. URL  u = new URL("http://192.168.0.100:8080/test.jsp?uuid=123");  
  6. conn = (HttpURLConnection)u.openConnection();  
  7. BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
  8. String line = "";  
  9. while((line=br.readLine())!=null){  
  10. Log.i("NetTest","lien="+line);  
  11. }  
  12. catch (Exception e) {e.printStackTrace();}  
  13. finally{ conn.disconnect();}  

请注意一点,在Android3.0以上的版本里面,已经不允许直接在Activity里面进行网络的处理了,建议使用后台线程或者是干脆新建一个线程来运行,比如:


java代码:
  1. Thread t =new Thread(new Runnable() {  
  2. public void run() {  
  3. //上面的代码  
  4. }  
  5. });  
  6. t.start();  

HttpURLConnection使用Post的方式与后台交互,下载数据部分跟上一个示例是一样的,麻烦在于上传数据到服务器,需要进行设置和处理,如下:


java代码:
  1. URL  u = new URL("http://192.168.0.100:8080/test.jsp");  
  2. conn = (HttpURLConnection)u.openConnection();  
  3. //因为这个是post请求,下面两个需要设置为true   
  4. conn.setDoOutput(true);   
  5. conn.setDoInput(true);   

java代码:
  1. // 设置以POST方式   
  2. conn.setRequestMethod("POST");   
  3. // Post 请求不能使用缓存   
  4. conn.setUseCaches(false);   
  5. conn.setInstanceFollowRedirects(true);   
  6. // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的   
  7. conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");   
  8. //DataOutputStream流   
  9. DataOutputStream out = new DataOutputStream(conn.getOutputStream());   
  10. //要上传的参数   
  11. String content = "uuid=" + URLEncoder.encode("post测试""utf-8");   
  12. //将要上传的内容写入流中   
  13. out.writeBytes(content);    
  14. //刷新、关闭   
  15. out.flush();   
  16. out.close();  

使用Apache的Http操作包来实现以Get的方式与后台交互,示例如下:


java代码:
  1. //封装用于请求的 方法 对象  
  2. HttpGet get = new HttpGet("http://192.168.0.100:8080/test.jsp?uuid=uuid121&name=name222");  
  3. //创建一个Http的客户端对象  
  4. HttpClient client = new DefaultHttpClient();  
  5. try//发送请求,并获得返回对象  
  6. HttpResponse response = client.execute(get);  
  7. //从response对象里面把返回值取出来  
  8. HttpEntity entity = response.getEntity();  
  9. //得到返回内容的流,接下来就是流式操作了  
  10. InputStream in = entity.getContent();  
  11. BufferedReader reader = new BufferedReader(new InputStreamReader(in));  
  12. StringBuffer buffer = new StringBuffer();  
  13. String tempStr = "";  
  14. while((tempStr=reader.readLine())!=null){  
  15. buffer.append(tempStr);  
  16. }  
  17. in.close();//应该写finally里面去  
  18. reader.close();//应该写finally里面去  
  19. Log.i("javass",buffer.toString());  
  20. }catch(Exception err){err.printStackTrace();}  
  21.    

使用Apache的Http操作包来实现以Post的方式与后台交互,示例如下:


java代码:
  1. //封装用于请求的 方法 对象  
  2. HttpPost post = new HttpPost("http://192.168.0.100:8080/test.jsp");  
  3. //为post组织参数  
  4. NameValuePair uuid = new BasicNameValuePair("uuid","postUuid");  
  5. NameValuePair name = new BasicNameValuePair("name","postname");  
  6. List<NameValuePair> list = new ArrayList<NameValuePair>();  
  7. list.add(uuid);  
  8. list.add(name);  
  9. //把这些参数封装到HttpEntity中  
  10. HttpEntity reqEntity = null;  
  11. reqEntity = new UrlEncodedFormEntity(list);  
  12. //然后把HttpEntity设置到post对象里面去  
  13. post.setEntity(reqEntity);  
  14.    
  15. //创建一个Http的客户端对象  
  16. HttpClient client = new DefaultHttpClient();  
  17. //发送请求,并获得返回对象  
  18. HttpResponse response = client.execute(post);  
后面获取response的Entity等的处理,跟get方式是完全一样的,这里就不去赘述了。

操作JSON

在实际应用开发中,网络间传输的数据经常是JSON格式的,除非十分有必要,不会去使用XML。因此必须要掌握Android如何处理JSON数据,Android已经自带了JSON的处理包“org.json”。下面就来看看如何解析已经获取的数据,获取数据的过程就是前面讲的获取的网络返回值。

返回单个对象的情况,示例如下:


java代码:
  1. JSONObject j = new JSONObject(jsonData);  
  2. String uuid = j.getString(“uuid");  

返回对象数组的情况,示例如下:


java代码:
  1. JSONArray ja = new JSONArray(jsonData);  
  2. for(int i=0;i<ja.length();i++){  
  3. JSONObject j = ja.getJSONObject(i);  
  4. String retUuid = j.getString("uuid");  
  5. String retName = j.getString("name");  
  6. Log.i("javass","ret jsonsss uuid="+retUuid+",name="+retName);  
  7. }  
视频配套PPT,视频地址【 Android4开发入门经典独家视频课程
10
14
分享到:
评论

相关推荐

    Android 4游戏编程入门经典

    第11章 3d编程技巧  11.1 准备工作  11.2 3d中的向量  11.3 opengl es中的光照  11.3.1 光照的工作机制  11.3.2 光源  11.3.3 材质  11.3.4 opengl es中如何对光照过程进行运算:顶点法线  11.3.5 实践  ...

    android开发入门与实战(下)

    第11章 循序渐进——开发Android应用的基本步骤 11.1 兵马未动粮草先行——应用规划及架构设计 11.2 应用开发步骤 11.2.1 界面设计始终是第一位——实现UI 11.2.2 必备的动力源泉——数据操作和存储 11.2.3 华丽转身...

    Android开发应用从入门到精通光盘

    第11—14章是典型应用篇,详细讲解了android在现实常见领域中的典型应用。第15—17章是综合实例篇,在具体讲解时都采取了实例验证的教学方法,每个实例先提出制作思路及包含知识点,在实例最后补充总结知识点并引导...

    android开发入门与实战(上)

    第11章 循序渐进——开发Android应用的基本步骤 11.1 兵马未动粮草先行——应用规划及架构设计 11.2 应用开发步骤 11.2.1 界面设计始终是第一位——实现UI 11.2.2 必备的动力源泉——数据操作和存储 11.2.3 华丽转身...

    [14本经典Android开发教程]-4-Android应用程序开发36技

    [14本经典Android开发教程]-4-Android应用程序开发36技 本书共分为4篇: ※ 第一篇:介绍应用框架概念、原理和特性。 ※ 第二篇:阐述应用框架之设计技巧。亦即,如何打造应用框架。 (注:如果你的职务是「使用」...

    《Google Android开发入门与实战》.pdf

    第11章 循序渐进——开发android应用的基本步骤 202 11.1 兵马未动 粮草先行——应用规划及架构设计 202 11.2 应用开发步骤 202 11.2.1 界面设计始终是第一位——实现ui 203 11.2.2 必备的动力源泉——...

    Android编程入门很简单.(清华出版.王勇).part1

    书名:《Android编程入门很简单》(清华大学出版社.王勇)。 压缩打包成2部分,这是第1部分。 本书是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书。本书避免出现...

    [14本经典Android开发教程]-3-Android SDK 中文开发文档

    [14本经典Android开发教程]-3-Android SDK 中文开发文档 什么是 Android? Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta版的 Android SDK 提供了在Android 平台上...

    android游戏编程入门

    《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1  1.1 Android简介 1  1.2 版本分裂 3  1.3 谷歌的角色 3  ...

    Google.Android开发入门与实战

     《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、环境搭建、SDK介绍、Market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个Android平台下的完整综合...

    老罗android开发视频教程全集百度网盘下载

    【第一版第十一章】老罗Android开发视频--通知的使用(2集) 【第一版第十二章】老罗Android开发视频--菜单的使用(4集) 【第一版第十三章】老罗Android开发视频--异步加载数据库(2集) 【第一版第十四章】老罗...

    Android 4高级编程(第3版)源代码

    本书见解深刻,帮助经验丰富的Android开发人员充分挖掘Android4的新特性的潜力,同时讲解了Android开发的基础知识,使初学者也可以借助本书入门。作为一本以实用性为目的的指导图书,本书带领您逐步完成复杂程度...

    [14本经典Android开发教程]-11-Android系统移植技术详解

    [14本经典Android开发教程]-11-Android系统移植技术详解 -------------------------------------------------- (1)安装如下软件包 sudo apt-get install git-core sudo apt-get install gnupg sudo apt-get install...

    android开发入门教程

    第11章 循序渐进——开发Android应用的基本步骤 11.1 兵马未动粮草先行——应用规划及架构设计 11.2 应用开发步骤 11.2.1 界面设计始终是第一位——实现UI 11.2.2 必备的动力源泉——数据操作和存储 11.2.3 华丽转身...

    新版Android开发教程.rar

    Android Android Android Android 开发入门 System System System System Requirements Requirements Requirements Requirements The sections below describe the system and software requirements for developing...

    Android高薪之路:Android程序员面试宝典 李宁

    第11章 2D绘图与动画技术 11 1 绘制基本图形 11 2 图像特效 11 3 路径 11 4 帧 Frame 动画 11 5 补间 Tween 动画 第12章 OpenGL ES 12 1 OpenGL ES简介 12 2 理解3D坐标系:照相机原理 12 3 如何使用OpenGL ES绘制...

    Google Android开发入门与实战的代码

    第11章 循序渐进——开发Android应用的基本步骤 202 11.1 兵马未动 粮草先行——应用规划及架构设计 202 11.2 应用开发步骤 202 11.2.1 界面设计始终是第一位——实现UI 203 11.2.2 必备的动力源泉——...

    Android编程入门课件

    第2章 搭建你的开发环境 第3章 新建第一个程序第4章 使用Android工具第5章 探索界面UI元素第6章 使用程序资源第7章 设计界面布局第8章 Android应用程序组成第10章 绚丽的多媒体技术第11章 Android网上冲浪第13章 ...

Global site tag (gtag.js) - Google Analytics