17_Android网络通信

1. Android异步任务处理

  在程序开启后,就会有一个主线程,负责与用户交互。如果在主线程中执行了耗时操作,那么界面就会停止响应,所以要将耗时操作转移到别的线程中。

  AsyncTask的用法,包括传入参数、设定后台任务、过程信息的处理等。

  下面代码的作用是:点击Button后,创建线程每隔3秒通过System.out.println()打印一段语句。

 1 package com.example.testthread;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6
 7 public class MainActivity extends Activity {
 8
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.activity_main);
13
14         findViewById(R.id.button1).setOnClickListener(
15                 new View.OnClickListener() {
16
17                     @Override
18                     public void onClick(View v) {
19
20                         // 创建新线程,不会影响主线程。并发执行
21                         new Thread() {
22                             public void run() {
23                                 try {
24
25                                     while (true) {
26                                         sleep(3000);
27                                         System.out
28                                                 .println(">>>>>>>>>>>>>>>>>Tick!");
29                                     }
30                                 } catch (InterruptedException e) {
31                                     // TODO Auto-generated catch block
32                                     e.printStackTrace();
33                                 }
34                             }
35                         }.start();
36
37                         // try {
38                         // Thread.sleep(3000);
39                         // System.out.println(">>>>>>>>>>>>>>>>>Tick!");
40                         // } catch (InterruptedException e) {
41                         // // TODO Auto-generated catch block
42                         // e.printStackTrace();
43                         // }
44                     }
45                 });
46     }
47 }

MainActivity

2. Android中基于HTTP的通信技术

  参考文章:浅谈HTTP中Get与Post的区别 http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

2.1 使用Http的Get方式读取网络数据

  这里使用了有道翻译API,execute("http://fanyi.youdao.com/openapi.do?keyfrom=testwangluo&key=936705455&type=data&doctype=json&version=1.1&q=china")表示查询词为china,json数据格式,会传回一定的信息。官网上的说明如下:

  本例程通过单击Button,向系统输出"china"单词的查询结果。需要互联网权限。

 1 package com.example.httpget;
 2
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.net.MalformedURLException;
 8 import java.net.URL;
 9 import java.net.URLConnection;
10
11 import android.app.Activity;
12 import android.os.AsyncTask;
13 import android.os.Bundle;
14 import android.view.View;
15 import android.widget.TextView;
16
17
18 public class MainActivity extends Activity {
19
20     private TextView textView;
21
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.activity_main);
26
27         textView = (TextView) findViewById(R.id.textView1);
28
29         findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
30
31             @Override
32             public void onClick(View v) {
33                 //由于读取互联网数据是比较耗时的,因此使用异步操作
34                 new AsyncTask<String, Void, Void>(){
35
36                     @Override
37                     protected Void doInBackground(String... params) {
38                         URL url;
39                         try {
40                             url = new URL(params[0]);
41                             URLConnection connection = url.openConnection();
42                             InputStream is = connection.getInputStream();
43                             InputStreamReader isr = new InputStreamReader(is, "UTF-8");
44                             BufferedReader br = new BufferedReader(isr);
45                             String line;
46                             while ((line = br.readLine()) != null) {
47                                 System.out.println(line);
48                                 //textView.setText(line);
49                             }
50                             br.close();
51                             isr.close();
52                             is.close();
53                         } catch (MalformedURLException e) {
54                             // TODO Auto-generated catch block
55                             e.printStackTrace();
56                         } catch (IOException e) {
57                             // TODO Auto-generated catch block
58                             e.printStackTrace();
59                         }
60                         return null;
61                     }
62
63                 }.execute("http://fanyi.youdao.com/openapi.do?keyfrom=testwangluo&key=936705455&type=data&doctype=json&version=1.1&q=china");
64             }
65         });
66     }
67
68 }

MainActivity

2.2 使用Http的Post方式与网络交互通信

  功能与Get方式一样,代码如下:

 1 package com.example.httppost;
 2
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.InputStreamReader;
 8 import java.io.OutputStreamWriter;
 9 import java.net.HttpURLConnection;
10 import java.net.MalformedURLException;
11 import java.net.URL;
12 import com.example.httpget.R;
13
14 import android.app.Activity;
15 import android.os.AsyncTask;
16 import android.os.Bundle;
17 import android.view.View;
18
19
20 public class MainActivity extends Activity {
21
22     //private TextView textView;
23
24     @Override
25     protected void onCreate(Bundle savedInstanceState) {
26         super.onCreate(savedInstanceState);
27         setContentView(R.layout.activity_main);
28
29         //textView = (TextView) findViewById(R.id.textView1);
30
31         //http://fanyi.youdao.com/openapi.do?keyfrom=testHTTP12&key=1382355899&type=data&doctype=json&version=1.1&q=bad
32         //问号后面,都是向服务器传递的数据
33         //get方法是将需要传递给服务器的数据,放在URL内部
34         //真实的URL是http://fanyi.youdao.com/openapi.do
35         //post方式
36
37         findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
38
39             @Override
40             public void onClick(View v) {
41                 //由于读取互联网数据是比较耗时的,因此使用异步操作
42                 new AsyncTask<String, Void, Void>(){
43
44                     @Override
45                     protected Void doInBackground(String... params) {
46                         URL url;
47                         try {
48                             url = new URL(params[0]);
49                             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
50
51                             //设置connection向服务器传输数据
52                             connection.setDoOutput(true);
53                             connection.setRequestMethod("POST");
54
55                             OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
56                             BufferedWriter bw = new BufferedWriter(osw);
57                             //不用带问号
58                             bw.write("keyfrom=testHTTP12&key=1382355899&type=data&doctype=json&version=1.1&q=china");
59                             //强制输出
60                             bw.flush();
61
62
63
64                             InputStream is = connection.getInputStream();
65                             InputStreamReader isr = new InputStreamReader(is, "UTF-8");
66                             BufferedReader br = new BufferedReader(isr);
67                             String line;
68                             while ((line = br.readLine()) != null) {
69                                 System.out.println(line);
70                                 //textView.setText(line);
71                             }
72                             br.close();
73                             isr.close();
74                             is.close();
75                         } catch (MalformedURLException e) {
76                             // TODO Auto-generated catch block
77                             e.printStackTrace();
78                         } catch (IOException e) {
79                             // TODO Auto-generated catch block
80                             e.printStackTrace();
81                         }
82                         return null;
83                     }
84
85                 }.execute("http://fanyi.youdao.com/openapi.do");
86             }
87         });
88     }
89
90 }

MainActivity

3. Android中基于Socket的网络通信

  Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。ServerSocket 用于服务器端,Socket 是建立网络连接时使用的。

  参考文章:揭开Socket编程的面纱 http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx

时间: 2024-11-04 07:54:40

17_Android网络通信的相关文章

docker容器网络通信原理分析

概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求.而容器的网络通信又可以分为两大方面:单主机容器上的相互通信和跨主机的容器相互通信.而本文将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker. docker单主机容器通信 基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的网络环境下,容器具有完全独立的网络栈,与宿主机隔离,也可以使容器共享主机或者其他容器的网络命名空间,基本可以

第八课 网络通信

unix_c_08.txt================第八课 网络通信================一.基本概念------------1. ISO/OSI七层网络协议模型~~~~~~~~~~~~~~~~~~~~~~~~~~+------------+--------------+ ---| 应用层 | Application | ^+------------+--------------+ || 表示层 | Presentation | 高层+------------+---------

NetworkComms网络通信框架序言

03年大学毕业,主要做Web开发,大家可以看看networkcomms中文站: www.networkcomms.cn  自己基于网上开源程序二次开发的:) 从06年开始,便把主要的学习精力放到网络通信上, 主要使用C#语言,WinForm框架,sql Server数据库. 工作于大企业的IT部门,平时有较多的时间用于技术研究,即便这样,在学习的初期,几年的时间内,都无法开发出比较稳定的CS系统,网络通信中需要调试和考虑的地方太多,能开发稳定的可复用的通信系统,我想只有传说中的高手才能做到,而我

c#网络通信框架networkcomms内核解析 序言

networkcomms是我遇到的写的最优美的代码,很喜欢,推荐给大家:) 基于networkcomms2.3.1开源版本( gplv3)协议,写了一些文章,希望大家喜欢,个人水平有限,不足之处难免. networkcommsc#通信框架来自于美丽的英国剑桥,由大洋彼岸的两位工程师 Marc Fletcher, Matthew Dean开发. c#网络通信框架networkcomms内核解析之一 消息传送 c#网络通信框架networkcomms内核解析之二 消息处理流程 c#网络通信框架net

Android网络通信库Volley简介

1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google I/O 2013上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.这是Volley名称的由来: a burst or emission of many things or a large amount at

Linux程序设计学习笔记----网络通信编程API及其示例应用

转载请注明出处, http://blog.csdn.net/suool/article/details/38702855. BSD Socket 网络通信编程 BSD TCP 通信编程流程 图为面向连接的Socket通信的双方执行函数流程.使用TCP协议的通信双方实现数据通信的基本流程如下 建立连接的步骤 1.首先服务器端需要以下工作: (1)调用socket()函数,建立Socket对象,指定通信协议. (2)调用bind()函数,将创建的Socket对象与当前主机的某一个IP地址和TCP端口

网络通信:单播、广播、组播

本文目录: 一.网络通信的分类.他们的定义和特点. 二.单播.广播.组播的传输信息的网络拓扑模型. 三.单播.广播.组播的编程实例. 一.网络通信的分类.他们的定义和特点. 二.单播.广播.组播的传输信息的网络拓扑模型. (一)单播 如图8-1 所示,网络中存在信息发送者Source,UserA 和UserC 提出信息需求,网络采用单播方式传输信息.                                                  单播传输特点归纳如下: * Source 向每个

详细讲解Android的网络通信(HttpUrlConnection和HttpClient)

前言,Android的网络通信的方式有两种:使用Socket或者HTTP,今天这一篇我们详细讲解使用HTTP实现的网络通信,HTTP又包括两种方式编程方式: (1)HttpUrlConnection: (2)HttpClient: 好了,我们直接进行讲解,当然之前也会有一部分有关Android网络通信的其他知识,我们也应该了解. 一.获取网络状态的方法 (1)MainActivity.java中的关键代码 1 2 3 4 5 6 7 8 //网络管理类,可以判断是否能上网,以及网络类型     

网络通信 --&gt; 互联网协议(二)

互联网协议(二) 一.对上一节的总结 我们已经知道,网络通信就是交换数据包.电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信.数据包的结构,基本上是下面这样: 发送这个包,需要知道两个地址: * 对方的MAC地址 * 对方的IP地址 有了这两个地址,数据包才能准确送到接收者手中.但是,前面说过,MAC地址有局限性,如果两台电脑不在同一个子网络,就无法知道对方的MAC地址,必须通过网关(gateway)转发. 上图中,1号电脑要向4号电脑发送一个数据包.它先判断