• URLConnection和HttpClient使用入门


    本讲内容:URLConnection和HttpClient使用入门
    在 Android中除了使用WebView控件访问网络以外,还有用代码方式访问网络的方法,代码方式有时候会显得更加灵活。本讲会介绍使用 URLConnection对象和HttpClient组件访问网络的方法。而这两种方法和Java Web开发中的使用方式几乎没有区别,而Web开发的相关资料比比皆是,因此有兴趣的同学学完本讲之后可以专门去研究一下HttpClient4.0的内 容,以求更深入的学习。
    一、分别使用URLConnection和HttpClient访问Google天气服务的例子
    这个例子的的目的就是从Google哪里获取郑州的天气预报信息,并显示在TextView中,本讲只会把返回的XML数据显示出来,下一讲我们学XML解析的时候再把这个天气预报做成图文并茂的形式,所以大家先暂时忍耐一下丑陋的界面。
    1、新建一个项目 Lesson30_HttpClient ,主Activity的文件名是 MainActivity.java
    2、res/layout/main.xml的内容如下:
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">

    3. <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/TextView01" android:text="网络连接测试">

    4. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Button01" android:text="使用URLConnection访问GoogleWeatherAPI">
    5. </button>

    6. <button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Button02" android:text="使用HttpClient访问GoogleWeatherAPI">
    7. </button>

    8. <scrollview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ScrollView01">
    9.         <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/TextView02">
    10.         </textview>
    11. </scrollview>
    12. </textview></linearlayout>
    复制代码
    3、MainActivity.java的内容如下:
    1. package android.basic.lesson30;

    2. import java.io.InputStreamReader;
    3. import java.net.HttpURLConnection;
    4. import java.net.URL;

    5. import org.apache.http.client.ResponseHandler;
    6. import org.apache.http.client.methods.HttpGet;
    7. import org.apache.http.impl.client.BasicResponseHandler;
    8. import org.apache.http.impl.client.DefaultHttpClient;

    9. import android.app.Activity;
    10. import android.os.Bundle;
    11. import android.view.View;
    12. import android.widget.Button;
    13. import android.widget.TextView;
    14. import android.widget.Toast;

    15. public class MainActivity extends Activity {

    16.         TextView tv;

    17.         String googleWeatherUrl1 = "http://www.google.com/ig/api?weather=zhengzhou";
    18.         String googleWeatherUrl2 = "http://www.google.com/ig/api?hl=zh-cn&weather=zhengzhou";

    19.         /** Called when the activity is first created. */
    20.         @Override
    21.         public void onCreate(Bundle savedInstanceState) {
    22.                 super.onCreate(savedInstanceState);
    23.                 setContentView(R.layout.main);

    24.                 // 定义UI组件
    25.                 Button b1 = (Button) findViewById(R.id.Button01);
    26.                 Button b2 = (Button) findViewById(R.id.Button02);
    27.                 tv = (TextView) findViewById(R.id.TextView02);

    28.                 // 设置按钮单击监听器
    29.                 b1.setOnClickListener(new View.OnClickListener() {
    30.                         @Override
    31.                         public void onClick(View v) {
    32.                                 // 使用URLConnection连接GoogleWeatherAPI
    33.                                 urlConn();
    34.                         }
    35.                 });

    36.                 // 设置按钮单击监听器
    37.                 b2.setOnClickListener(new View.OnClickListener() {
    38.                         @Override
    39.                         public void onClick(View v) {
    40.                                 // 使用HttpCient连接GoogleWeatherAPI
    41.                                 httpClientConn();

    42.                         }
    43.                 });

    44.         }

    45.         // 使用URLConnection连接GoogleWeatherAPI
    46.         protected void urlConn() {

    47.                 try {
    48.                         // URL
    49.                         URL url = new URL(googleWeatherUrl1);
    50.                         // HttpURLConnection
    51.                         HttpURLConnection httpconn = (HttpURLConnection) url.openConnection();

    52.                         if (httpconn.getResponseCode() == HttpURLConnection.HTTP_OK) {
    53.                                 Toast.makeText(getApplicationContext(), "连接Google Weather API成功!",
    54.                                                 Toast.LENGTH_SHORT).show();
    55.                                 // InputStreamReader
    56.                                 InputStreamReader isr = new InputStreamReader(httpconn.getInputStream(), "utf-8");
    57.                                 int i;
    58.                                 String content = "";
    59.                                 // read
    60.                                 while ((i = isr.read()) != -1) {
    61.                                         content = content + (char) i;
    62.                                 }
    63.                                 isr.close();
    64.                                 //设置TextView
    65.                                 tv.setText(content);
    66.                         }
    67.                         //disconnect
    68.                         httpconn.disconnect();

    69.                 } catch (Exception e) {
    70.                         Toast.makeText(getApplicationContext(), "连接Google Weather API失败", Toast.LENGTH_SHORT)
    71.                                         .show();
    72.                         e.printStackTrace();
    73.                 }
    74.         }

    75.         // 使用HttpCient连接GoogleWeatherAPI
    76.         protected void httpClientConn() {
    77.                 //DefaultHttpClient
    78.                 DefaultHttpClient httpclient = new DefaultHttpClient();
    79.                 //HttpGet
    80.                 HttpGet httpget = new HttpGet(googleWeatherUrl2);
    81.                 //ResponseHandler
    82.                 ResponseHandler<string> responseHandler = new BasicResponseHandler();

    83.                 try {
    84.                         String content = httpclient.execute(httpget, responseHandler);
    85.                         Toast.makeText(getApplicationContext(), "连接Google Weather API成功!",
    86.                                         Toast.LENGTH_SHORT).show();
    87.                         //设置TextView
    88.                         tv.setText(content);
    89.                 } catch (Exception e) {
    90.                         Toast.makeText(getApplicationContext(), "连接Google Weather API失败", Toast.LENGTH_SHORT)
    91.                         .show();
    92.                         e.printStackTrace();
    93.                 }
    94.                 httpclient.getConnectionManager().shutdown();
    95.         }
    96. }</string>
    复制代码
    4、 最后别忘了在AndroidManifest.xml中加入访问网络的权限,<uses-permission android:name="android.permission.INTERNET"></uses-permission>5、 运行程序查看结果:
      
    按第一个按钮的效果,返回的数据结果显示在了TextView里。
      
    按第二个按钮的效果,返回的数据结果显示在了TextView里, 所不同的是显示的是中文。好了,本讲先到这里。
  • 相关阅读:
    调试tomcat的过滤器配置
    嵌入式实操----基于RT1170 FreeRTOS时定器接口封装(二十二)
    嵌入式实操----基于RT1170 首板硬件之tempsensor温度传感器调试(二十一)
    嵌入式实操----基于RT1170 首板硬件之第一阶段总结(十九)
    嵌入式实操----基于RT1170 首板硬件之WDT调试(二十)
    嵌入式实操----基于RT1170 首板硬件之CAN BUS TJA1043显示调试(十八)
    嵌入式实操----基于RT1170 首板硬件之MIPI显示调试(十七)
    嵌入式实操----基于RT1170 首板硬件之ADC调试(十六)
    嵌入式实操----基于RT1170 首板硬件之EEPROM AT24C16调试(十五)
    嵌入式实操----基于RT1170 首板硬件之QSPI Flash调试(十三)
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3263784.html
Copyright © 2020-2023  润新知