• 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数据格式,会传回一定的信息。官网上的说明如下:

      本例程通过单击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

  • 相关阅读:
    hdu-4638
    一个简单的询问
    CoderForces-617B
    HYSBZ-2002弹飞绵羊
    邻接表
    CoderForces-913-C
    CoderForces-913D
    CoderFocers-620C
    CoderForces-375D
    HDU-6119
  • 原文地址:https://www.cnblogs.com/510602159-Yano/p/4072781.html
Copyright © 2020-2023  润新知