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的通信技术

  参考文章:浅谈HTTPGetPost的区别 http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

2.1 使用HttpGet方式读取网络数据

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

17_Android网络通信

17_Android网络通信

  本例程通过单击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 使用HttpPost方式与网络交互通信

  功能与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

 

你可能感兴趣的:(android)