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网络通信的更多相关文章

  1. ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信

    本文内容摘要:1)安装zeromq.2)实例说明使用zmq进行网络间的消息发送和接收 首先在机器中安装zmq库 步骤如下: 1)下载zeromq的源代码,ZeroMQ的官方网址:http://zero ...

  2. 基础笔记12(socket,url网络通信)

    进一步深入socket 1.网络通信条件: .IP地址,可用主机名. .传输数据时将不用的应用程序通过数字标识区分开来,这种标识称为逻辑端口,也称端口.(0-65535端口,一般系统预留0-1024) ...

  3. Windows Store App 网络通信 HttpWebRequest

    如果希望更好地控制HTTP请求,可以使用System.Net类库中的HttpWebRequest类,该类对HTTP协议进行了完整的封装,并且提供了很多对HTTP协议中的 Header.Content和 ...

  4. socket网络通信

    1.socket通常也称作"套接字",用于描述IP地址和端口.在internet上的主机一般运行了多个服务软件,同时提供几种服务,每种服务都打开一个socket,并绑定到一个端口上 ...

  5. 20145316&20145229实验五:网络通信

    20145316&20145229实验五:网络通信 结对伙伴:20145316 博客链接:http://www.cnblogs.com/xxy745214935/p/6130897.html

  6. 网络通信之Socket与LocalSocket的比较

    Socket与LocalSocket都可以实现网络通信,两个有什么区别呢? LocalSocket其通信方式与Socket差不多,只是LocalSocket没有跨越网络边界. 于是,思考到一个问题:a ...

  7. Android 网络通信API的选择和实现实例

    Android开发网络通信一开始的时候使用的是AsyncTask封装HttpClient,没有使用原生的HttpURLConnection就跳到了Volley,随着OkHttp的流行又开始迁移到OkH ...

  8. java 25 - 2 网络编程之 网络通信三要素

    网络通信三要素 IP地址: InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号) 端口号: 用于标识进程的逻辑地址,不同进程的标识(正在运行的软件的标识号) 传输协议: 通 ...

  9. TCP/UDP,SOCKET网络通信,C++/Java实现

    趁这两天没事干,就把网络通信这一块搞一搞,C/S方面的了解一下,很重要! TCP Server/Client

随机推荐

  1. Java学习的第二十八天

    1.Scanner类 序列化 将实体类标注为可序列化 2.不明白 3.明天学习反序列化,transient关键字,序列化一组对象

  2. python爬虫爬取策略

    爬取策略 关注公众号"轻松学编程"了解更多. 在爬虫系统中,待抓取URL队列是很重要的一部分.待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那 ...

  3. Appium常用操作之「微信滑屏、触屏操作」

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.滑屏操作 1.访问之后,马上就滑屏可以吗? 2.连续实现 2 次滑屏 3.代码 二.模拟触屏 ...

  4. [Luogu P2827] 蚯蚓 (巧妙的模拟)

    题面: 传送门:https://www.luogu.org/problemnew/show/P2827 Solution 看到这题,我们肯定会有一个大胆想法. 那就是直接用堆模拟这个过程. 对于q,我 ...

  5. 浅析 AC 自动机

    目录 简述 AC 自动机是什么 AC 自动机有什么用 AC 自动机·初探 AC 自动机·原理分析 AC 自动机·代码实现 AC 自动机·更进一步 第一题 第二题 第三题 从 AC 自动机到 fail ...

  6. 手写Koa.js源码

    用Node.js写一个web服务器,我前面已经写过两篇文章了: 第一篇是不使用任何框架也能搭建一个web服务器,主要是熟悉Node.js原生API的使用:使用Node.js原生API写一个web服务器 ...

  7. leetcode131:letter-combinations-of-a-phone-number

    题目描述 给出一个仅包含数字的字符串,给出所有可能的字母组合. 数字到字母的映射方式如下:(就像电话上数字和字母的映射一样) Input:Digit string "23"Outp ...

  8. 《精通Spring4.x企业应用开发实战》第三章

    这一章节主要介绍SpringBoot的使用,也是学习的重点内容,之后就打算用SpringBoot来写后台,所以提前看一下还是很有必要的. 3.SpringBoot概况 3.1.1SpringBoot发 ...

  9. Spider_实践_beautifulsoup静态网页爬取所有网页链接

    # 获取百度网站首页上的所有a标签里的 href属性值: # import requests # from bs4 import BeautifulSoup # # html = requests.g ...

  10. 云原生haproxy 代理-ebpf

    在如下网络层面下,代理(比如Envoy nginx )执行额外的L7策略(Health checks, service discovery, load balancing, mutual TLS),其 ...