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
17_Android网络通信的更多相关文章
- ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信
本文内容摘要:1)安装zeromq.2)实例说明使用zmq进行网络间的消息发送和接收 首先在机器中安装zmq库 步骤如下: 1)下载zeromq的源代码,ZeroMQ的官方网址:http://zero ...
- 基础笔记12(socket,url网络通信)
进一步深入socket 1.网络通信条件: .IP地址,可用主机名. .传输数据时将不用的应用程序通过数字标识区分开来,这种标识称为逻辑端口,也称端口.(0-65535端口,一般系统预留0-1024) ...
- Windows Store App 网络通信 HttpWebRequest
如果希望更好地控制HTTP请求,可以使用System.Net类库中的HttpWebRequest类,该类对HTTP协议进行了完整的封装,并且提供了很多对HTTP协议中的 Header.Content和 ...
- socket网络通信
1.socket通常也称作"套接字",用于描述IP地址和端口.在internet上的主机一般运行了多个服务软件,同时提供几种服务,每种服务都打开一个socket,并绑定到一个端口上 ...
- 20145316&20145229实验五:网络通信
20145316&20145229实验五:网络通信 结对伙伴:20145316 博客链接:http://www.cnblogs.com/xxy745214935/p/6130897.html
- 网络通信之Socket与LocalSocket的比较
Socket与LocalSocket都可以实现网络通信,两个有什么区别呢? LocalSocket其通信方式与Socket差不多,只是LocalSocket没有跨越网络边界. 于是,思考到一个问题:a ...
- Android 网络通信API的选择和实现实例
Android开发网络通信一开始的时候使用的是AsyncTask封装HttpClient,没有使用原生的HttpURLConnection就跳到了Volley,随着OkHttp的流行又开始迁移到OkH ...
- java 25 - 2 网络编程之 网络通信三要素
网络通信三要素 IP地址: InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号) 端口号: 用于标识进程的逻辑地址,不同进程的标识(正在运行的软件的标识号) 传输协议: 通 ...
- TCP/UDP,SOCKET网络通信,C++/Java实现
趁这两天没事干,就把网络通信这一块搞一搞,C/S方面的了解一下,很重要! TCP Server/Client
随机推荐
- python实现登录验证系统(搭建MVC框架)
小型登录注册验证系统 关注公众号"轻松学编程"了解更多. 一.概述 使用Redis+MySQL数据库实现一个小型的登录注册验证系统.在这个系统中初步了解认识MVC框架. 具 ...
- 修改redo log 的大小
alert日志中含有大量警告信息:"Thread 1 cannot allocate new log, sequence 320xx Checkpoint not complete" ...
- 对比JAVA、Python、C、Go运行时间,我惊呆了!!!
对比JAVA.Python.C.Go运行时间,我惊呆了!!! 周末在寝室刷完算法,想放松一下,于是做了一个实验:用现在主流的几种编程语言对0 - (10000000 - 1)求和,结果我惊呆了,话不多 ...
- 制作安装Linux操作系统的启动U盘方法其实就这么简单
安装系统前,我们需要制作系统安装启动U盘(或者DVD,但已经很少使用DVD,所以不再介绍),通过启动U盘来帮助我们安装下载好的Linux系统. 接下来我们来介绍在Windows.Linux和MacOS ...
- SpringMVC 直接返回中文字符串时,出现乱码(?)的问题
在springmvc.xml中加入下面配置得以解决. <mvc:annotation-driven> <mvc:message-converters> <bean cla ...
- ant-design-vue 快速避坑指南
ant-design-vue是蚂蚁金服 Ant Design 官方唯一推荐的Vue版UI组件库,它其实是Ant Design的Vue实现,组件的风格与Ant Design保持同步,组件的html结构和 ...
- 【SpringBoot】14. SpringBoot多环境配置
SpringBoot多环境配置 Spring Boot 1.5.19.RELEASE 假设项目中需要3个环境--开发.测试.生产 profile :代表的就是一个环境变量 语法结构:applicati ...
- 6 MVVM进阶
1. 背景 MVVM是一种常用的设计模式,它的最主要功能是将数据与代码隔离,实现viewmodel的可测试.架构图如下: 2. 命令-Command 2.1 WPF 路由命令 WPF提供一种内置的命令 ...
- Facebook 的神仙组长什么样?
这里是<齐姐聊大厂>系列的第 14 篇 每周五早上 8 点,与你唠唠大厂的那些事 号外号外!前 12 篇已出 PDF:公粽号后台回复「大厂」即可获得! ❝ 小齐说: 这篇文章是来自阿米粥的 ...
- Linux下端口被占用,关掉端口占用的方法
Linux下端口被占用(例如端口3000),关掉端口占用的进程的方法: 1.netstat -tln | grep 3000 2.sudo lsof -i:3000 3.sudo kill -9 进程