用httpURLconnection来进行网络访问-天气预报信息获取实例
1.网络权限的设置
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.bwf.a22_http_01" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.bwf.a22_http_01.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!-- 网络权限 --> <uses-permission android:name="android.permission.INTERNET"/> </manifest>
1 package com.bwf.a22_http_01; 2 3 import java.io.InputStream; 4 import java.net.HttpURLConnection; 5 import java.net.MalformedURLException; 6 import java.net.URL; 7 import java.net.URLEncoder; 8 import java.util.ArrayList; 9 10 import javax.net.ssl.HttpsURLConnection; 11 12 import android.net.Uri; 13 import android.os.Bundle; 14 import android.app.Activity; 15 import android.view.Menu; 16 import android.view.MenuItem; 17 import android.widget.TextView; 18 /** 19 * 使用HttpUrlConnection进行网络请求的基本流程 20 * 1. 创建URL对象url,用于指定要请求的资源 21 * 2. 通过url的openConnection方法来打开连接 22 * 3. 可以对连接进行相应设置,请求方式、请求超时等 23 * 4. 可以通过getResponsdeCode方法获取响应码 24 * 5. 如果连接是正常的,就可以获取通过getInputStream网络流 25 * 6. 处理读到的数据 26 * 7. 关闭连接 27 * */ 28 public class MainActivity extends Activity { 29 TextView tv; 30 31 @Override 32 protected void onCreate(Bundle savedInstanceState) { 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.activity_main); 35 36 tv = (TextView) findViewById(R.id.tv); 37 } 38 39 @Override 40 public boolean onCreateOptionsMenu(Menu menu) { 41 // Inflate the menu; this adds items to the action bar if it is present. 42 getMenuInflater().inflate(R.menu.main, menu); 43 return true; 44 } 45 46 @Override 47 public boolean onOptionsItemSelected(MenuItem item) { 48 switch (item.getItemId()) { 49 case R.id.action_download: 50 new Thread(new Runnable() { 51 52 @Override 53 public void run() { 54 URL url; 55 try { 56 //url = new URL("http://www.sina.com/"); 57 String str1 = "http://wthrcdn.etouch.cn/weather_mini?city="; 58 String strUrl = str1 + URLEncoder.encode("成都", "UTF-8"); 59 url = new URL(strUrl); 60 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 61 conn.setRequestMethod("GET"); 62 conn.setReadTimeout(5 * 1000); 63 int code = conn.getResponseCode(); 64 65 if(code == 200){ 66 InputStream in = conn.getInputStream(); 67 byte[] buffer = new byte[1024 * 5]; 68 int len = in.read(buffer); 69 final String str = new String(buffer, 0, len); 70 71 runOnUiThread(new Runnable() { 72 73 @Override 74 public void run() { 75 tv.setText(str); 76 } 77 }); 78 79 conn.disconnect(); 80 } 81 } catch (Exception e) { 82 // TODO Auto-generated catch block 83 e.printStackTrace(); 84 } 85 } 86 }).start(); 87 break; 88 89 default: 90 break; 91 } 92 return super.onOptionsItemSelected(item); 93 } 94 }
浙公网安备 33010602011771号