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

最新文章

  1. Leetcode 笔记 116 - Populating Next Right Pointers in Each Node
  2. Linux中fork的秘密
  3. Gym 100703G---Game of numbers(DP)
  4. Loadrunner上传与下载文件脚本
  5. 自建数据源(RSO2)、及数据源增强
  6. [Java Web] 4、JavaScript 简单例子(高手略过)
  7. Apache2.2 + php-5.4.45-Win32-VC9-x86 配置
  8. CRM 2016 自定义lookup过滤
  9. 【leetcode】13. Roman to Integer
  10. 最受欢迎linux命令
  11. javascript系列之DOM(三)---事件
  12. jq模糊匹配
  13. js如何准确获取当前页面url网址信息
  14. [USACO15JAN]电影移动Moovie Mooving
  15. java 值传递和引用传递
  16. TCP点对点转发的实现与原理(nodejs)
  17. 调研行为树jbt
  18. sass进阶—变量运算
  19. [PA2014]Parking
  20. 初试fiddler

热门文章

  1. python使用matplotlib画图,jieba分词、词云、selenuium、图片、音频、视频、文字识别、人脸识别
  2. 在springmvc.xml中定义全局的异常处理
  3. Oracle初始——第一天
  4. Cuda常用概念及注意点
  5. wait()系统调用分别演示在父子进程
  6. WIN10下安装python3.7.2出现“尝试创建C:\Users\XX\AppData\Roaming\Microsoft\Installer时出错”
  7. Oracle 集合类型
  8. Vue 组件化开发
  9. mysql之多表查询的其他查询
  10. Spring Cloud配置中心之Consul