• Android HTTP通讯


    这里有一个非常棒的http通讯的总结,我看了以后茅塞顿开。

    先贴代码:

    01 public class Activity1 extends Activity {
    02  
    03     private final String DEBUG_TAG = "System.out";
    04  
    05     private TextView mTextView;
    06     private Button mButton;
    07  
    08     protected void onCreate(Bundle savedInstanceState) {
    09         super.onCreate(savedInstanceState);
    10         setContentView(R.layout.main);
    11  
    12         mTextView = (TextView) findViewById(R.id.TextView01);
    13         mButton = (Button) findViewById(R.id.Button01);
    14         mButton.setOnClickListener(new httpListener());
    15     }
    16  
    17     // 设置按钮监听器
    18     class httpListener implements OnClickListener {
    19         public void onClick(View v) {
    20             refresh();
    21         }
    22     }
    23  
    24     private void refresh() {
    25         String httpUrl = "http://192.168.0.101:8080/Test/test.jsp";
    26         // URL可以加参数
    27         // String httpUrl =
    28         // "http://192.168.0.101:8080/Test/test.jsp?par=abcdefg";
    29         String resultData = "";
    30         URL url = null;
    31         try {
    32             // 创建一个URL对象
    33             url = new URL(httpUrl);
    34         } catch (MalformedURLException e) {
    35             Log.d(DEBUG_TAG, "create URL Exception");
    36         }
    37         // 声明HttpURLConnection对象
    38         HttpURLConnection urlConn = null;
    39         // 声明InputStreamReader对象
    40         InputStreamReader in = null;
    41         // 声明BufferedReader对象
    42         BufferedReader buffer = null;
    43         String inputLine = null;
    44         if (url != null) {
    45             try {
    46                 // 使用HttpURLConnection打开连接
    47                 urlConn = (HttpURLConnection) url.openConnection();
    48                 // 得到读取的内容(流)
    49                 in = new InputStreamReader(urlConn.getInputStream());
    50                 // 创建BufferReader对象,输出时候用到
    51                 buffer = new BufferedReader(in);
    52                 // 使用循环来读取数据
    53                 while ((inputLine = buffer.readLine()) != null) {
    54                     // 在每一行后面加上换行
    55                     resultData += inputLine + " ";
    56                 }
    57                 // 设置显示取的的内容
    58                 if (resultData != null && !resultData.equals("")) {
    59                     mTextView.setText(resultData);
    60                 } else {
    61                     mTextView.setText("读取的内容为空");
    62                 }
    63             } catch (IOException e) {
    64                 e.printStackTrace();
    65             } finally {
    66                 try {
    67                     // 关闭InputStreamReader
    68                     in.close();
    69                     // 关闭URL连接
    70                     urlConn.disconnect();
    71                 } catch (IOException e) {
    72                     e.printStackTrace();
    73                 }
    74             }
    75         } else {
    76             Log.d(DEBUG_TAG, "URL is NULL");
    77         }
    78     }
    79 }

    第二种方式:

    001 public class Activity2 extends Activity {
    002  
    003     private final String DEBUG_TAG = "System.out";
    004  
    005     private TextView mTextView;
    006     private Button mButton;
    007  
    008     protected void onCreate(Bundle savedInstanceState) {
    009         super.onCreate(savedInstanceState);
    010         setContentView(R.layout.main);
    011  
    012         mTextView = (TextView) findViewById(R.id.TextView01);
    013         mButton = (Button) findViewById(R.id.Button01);
    014         mButton.setOnClickListener(new httpListener());
    015     }
    016  
    017     // 设置按钮监听器
    018     class httpListener implements OnClickListener {
    019         public void onClick(View v) {
    020             refresh();
    021         }
    022     }
    023  
    024     private void refresh() {
    025         String httpUrl = "http://192.168.0.101:8080/Test/test.jsp";
    026         String resultData = "";
    027         URL url = null;
    028         try {
    029             // 创建一个URL对象
    030             url = new URL(httpUrl);
    031         } catch (MalformedURLException e) {
    032             Log.d(DEBUG_TAG, "create URL Exception");
    033         }
    034         // 声明HttpURLConnection对象
    035         HttpURLConnection urlConn = null;
    036         // 声明InputStreamReader对象
    037         InputStreamReader in = null;
    038         // 声明BufferedReader对象
    039         BufferedReader buffer = null;
    040         String inputLine = null;
    041         // 声明DataOutputStream流
    042         DataOutputStream out = null;
    043         if (url != null) {
    044             try {
    045                 // 使用HttpURLConnection打开连接
    046                 urlConn = (HttpURLConnection) url.openConnection();
    047                 // 因为这个是POST请求所以要设置为true
    048                 urlConn.setDoInput(true);
    049                 urlConn.setDoOutput(true);
    050                 // 设置POST方式
    051                 urlConn.setRequestMethod("POST");
    052                 // POST请求不能设置缓存
    053                 urlConn.setUseCaches(false);
    054                 urlConn.setInstanceFollowRedirects(false);
    055                 // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
    056                 urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
    057                 // 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成
    058                 // 要注意的是connectio.getOutputStream会隐含的进行connect
    059                 urlConn.connect();
    060                 // DataOutputStream流
    061                 out = new DataOutputStream(urlConn.getOutputStream());
    062                 String content = "par=" + URLEncoder.encode("abcdefg","gb2312");
    063                 // 将要上传的内容写入流中
    064                 out.writeBytes(content);
    065                 // 得到读取的内容(流)
    066                 in = new InputStreamReader(urlConn.getInputStream());
    067                 // 创建BufferReader对象,输出时候用到
    068                 buffer = new BufferedReader(in);
    069                 // 使用循环来读取数据
    070                 while ((inputLine = buffer.readLine()) != null) {
    071                     // 在每一行后面加上换行
    072                     resultData += inputLine + " ";
    073                 }
    074                 // 设置显示取的的内容
    075                 if (resultData != null && !resultData.equals("")) {
    076                     mTextView.setText(resultData);
    077                 } else {
    078                     mTextView.setText("读取的内容为空");
    079                 }
    080             } catch (IOException e) {
    081                 e.printStackTrace();
    082             } finally {
    083                 try {
    084                     // 刷新DataOutputStream流
    085                     out.flush();
    086                     // 关闭DataOutputStream流
    087                     out.close();
    088                     // 关闭InputStreamReader
    089                     in.close();
    090                     // 关闭URL连接
    091                     urlConn.disconnect();
    092                 } catch (IOException e) {
    093                     e.printStackTrace();
    094                 }
    095             }
    096         } else {
    097             Log.d(DEBUG_TAG, "URL is NULL");
    098         }
    099     }
    100 }

    第三种方式

    01 public class Activity3 extends Activity{
    02     private TextView mTextView;
    03     private Button mButton;
    04  
    05     protected void onCreate(Bundle savedInstanceState) {
    06         super.onCreate(savedInstanceState);
    07         setContentView(R.layout.main);
    08         mTextView = (TextView) findViewById(R.id.TextView01);
    09         mButton = (Button) findViewById(R.id.Button01);
    10         mButton.setOnClickListener(new httpListener());
    11     }
    12  
    13     // 设置按钮监听器
    14     class httpListener implements OnClickListener {
    15         public void onClick(View v) {
    16             String httpUrl = "http://192.168.0.101:8080/Test/test.jsp?par=HttpClient_android_Get";
    17             // HttpGet连接对象
    18             HttpGet httpRequest = new HttpGet(httpUrl);
    19             try {
    20                 // 取的HttpClient对象
    21                 HttpClient httpclient = new DefaultHttpClient();
    22                 // 请求HttpClient,取的HttpResponse
    23                 HttpResponse httpResponse = httpclient.execute(httpRequest);
    24                 // 请求成功
    25                 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    26                     // 取的返回的字符串
    27                     String strResult = EntityUtils.toString(httpResponse.getEntity());
    28                     // 这个返回值可能会在行尾出现小方格
    29                     // 在TextView要显示的文字过滤掉回车符(" ")就可以正常显示了。
    30                     String strsResult = strResult.replace(" ", "");
    31                     mTextView.setText(strsResult);
    32                 } else {
    33                     mTextView.setText("请求错误");
    34                 }
    35             } catch (ClientProtocolException e) {
    36                 mTextView.setText(e.getMessage().toString());
    37             } catch (IOException e) {
    38                 mTextView.setText(e.getMessage().toString());
    39             } catch (Exception e) {
    40                 mTextView.setText(e.getMessage().toString());
    41             }
    42         }
    43     }
    44 }

    第四种方式

     
    01 public class Activity4 extends Activity{
    02     private TextView mTextView;
    03     private Button mButton;
    04  
    05     protected void onCreate(Bundle savedInstanceState) {
    06         super.onCreate(savedInstanceState);
    07         setContentView(R.layout.main);
    08         mTextView = (TextView) findViewById(R.id.TextView01);
    09         mButton = (Button) findViewById(R.id.Button01);
    10         mButton.setOnClickListener(new httpListener());
    11     }
    12  
    13     // 设置按钮监听器
    14     class httpListener implements OnClickListener {
    15         public void onClick(View arg0) {
    16             String httpUrl = "http://192.168.0.101:8080/Test/test.jsp";
    17             // 创建HttpPost连接对象
    18             HttpPost httpRequest = new HttpPost(httpUrl);
    19             // 使用NameValuePair来保存要传递的Post参数
    20             List params = new ArrayList();
    21             // 添加要传递的参数
    22             params.add(new BasicNameValuePair("par","HttpClient_android_Post"));
    23             try {
    24                 // 设置字符集
    25                 HttpEntity httpentity = newUrlEncodedFormEntity(params,"gb2312");
    26                 // 请求httpRequest
    27                 httpRequest.setEntity(httpentity);
    28                 // 取的默认的HttpClient
    29                 HttpClient httpclient = new DefaultHttpClient();
    30                 // 取的HttpResponse
    31                 HttpResponse httpResponse = httpclient.execute(httpRequest);
    32                 // HttpStatus.SC_OK表示连接成功
    33                 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
    34                     // 取的返回的字符串
    35                     String strResult = EntityUtils.toString(httpResponse.getEntity());
    36                     // 这个返回值可能会在行尾出现小方格
    37                     // 在TextView要显示的文字过滤掉回车符(" ")就可以正常显示了。
    38                     String strsResult = strResult.replace(" ", "");
    39                     mTextView.setText(strsResult);
    40                 } else {
    41                     mTextView.setText("请求错误");
    42                 }
    43             } catch (ClientProtocolException e) {
    44                 mTextView.setText(e.getMessage().toString());
    45             } catch (IOException e) {
    46                 mTextView.setText(e.getMessage().toString());
    47             } catch (Exception e) {
    48                 mTextView.setText(e.getMessage().toString());
    49             }
    50         }
    51     }
    52 }
  • 相关阅读:
    vue项目使用async await 封装 axios
    vue实现预览功能(包括doc,pdf,图片,视频)
    vue中实现下载文件功能
    vue项目中加入拖放排序功能
    Vue项目中生成二维码
    position跟display、overflow、float这些特性相互叠加后会怎么样?
    localStorage使用注意
    webpack 使用总结
    cookie作用域
    语法糖的理解
  • 原文地址:https://www.cnblogs.com/xiaochao1234/p/3552910.html
走看看 - 开发者的网上家园