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
随机推荐
- linux的mysql数据库创建和删除
mysql -h localhost -u 用戶名 -p密碼 //连接数据库use desk_show; ...
- 庐山真面目之二微服务架构NGINX版本实现
一.简介 在上一篇文章<庐山真面目之微服务的简介和技术栈>中,我们已经探讨了微服务的来龙去脉,也说了想要实现微服务架构所需要的技术栈,今天我们开始实现一个微服务,当然这个 ...
- Git使用push命令卡住?
为什么Git用ssh连不上GitHub,push就卡住,而用HTTPS可以连接.上一次用Git的ssh连接时候还可以,这段时间再重新使用Git却发现ssh方式push到Git,每次一push就卡住,找 ...
- 关于C语言中的位运算符的学习即应用
一.运算符的种类和运算规则: & 与:全1则1,有0则0 | 或:有1则1,全0则0 ^ 异或:相同为0,不同为1 ~ 取反:~是一元运算符,用来对一 ...
- 题解 AT3877 【[ARC089C] GraphXY】
参考的博客 在[有趣的思维题]里看到了这道题. 题意: 给出一个\(A\times B\)的矩阵,其中第i行第j列元素为\(d_{i,j}\),试构造一个有向图,满足: 有向图点数\(\le 300\ ...
- CEF避坑指南(一)——编译并自制浏览器
CEF即Chromium Embedded Framework,Chrome浏览器嵌入式框架.我们可以从自制浏览器入手,深入学习它.它提供了接口供程序员们把Chrome放到自己的程序中.许多大型公司, ...
- python中的时间和时间格式转换
1.python中的时间:要得到年月日时分秒的时间: import time #time.struct_time(tm_year=2012, tm_mon=9, tm_mday=15, tm_hour ...
- 深入探讨HBASE
HBASE基础 1. HBase简介HBase是一个高可靠.高性能.面向列的,主要用于海量结构化和半结构化数据存储的分布式key-value存储系统. 它基于Google Bigtable开源实现,但 ...
- 客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码
一:背景 1. 讲故事 周五下午运营反馈了一个紧急bug,说客户那边一个信息列表打不开,急需解决,附带的日志文件也发过来了,看了下日志大概是这样的: 日期:2020-11-13 12:25:45,92 ...
- shell编程之字符串操作
shell中字符串操作主要有以下几种,其中:pattern ,old中可以使用通配符: ${#var} :返回字符串变量var的长度 ${var:m} :返回${var}中从第m+1个字符到最后的部分 ...