manifest 中要 开启 网络权限
<span style="font-size:14px;"><uses-permission android:name="android.permission.INTERNET" /></span>
<span style="font-size:14px;"><uses-permission android:name="android.permission.INTERNET" /></span>
布局文件
<span style="font-size:14px;"> <EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText_city"
android:text="北京"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_toStartOf="@+id/button2_query" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询"
android:onClick="queryClick"
android:id="@+id/button2_query"
android:layout_alignTop="@+id/editText_city"
android:layout_alignParentEnd="true" />
</RelativeLayout></span>
Activity代码
<span style="font-size:14px;">public class WeatherActivity extends AppCompatActivity {
private EditText editText_city;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_weather);
editText_city = (EditText) findViewById(R.id.editText_city);
weatherHandler = new WeatherHandler(this);
}
/**
* 布局文件中 按钮 的单击 事件
*/
public void queryClick(View view){
String city = editText_city.getText().toString();
if(TextUtils.isEmpty(city)){ // 防止输入框为空
Toast.makeText(WeatherActivity.this, "请输入城市", Toast.LENGTH_SHORT).show();
return;
}
query(city); //抽取成方法到下面
}
private WeatherHandler weatherHandler;
private static class WeatherHandler extends Handler{
private WeakReference<WeatherActivity> weakReference; // 防止 内存泄露 使用 弱引用
public WeatherHandler(WeatherActivity weatherActivity){
weakReference = new WeakReference<WeatherActivity>(weatherActivity);
}
@Override
public void handleMessage(Message msg) {
WeatherActivity weatherActivity = weakReference.get();
if(weatherActivity!=null){
switch (msg.what){
case GET_WEATHER_SUCCESS:
System.out.println(((ArrayList<String>)msg.obj).toString()); //
break;
}
}
}
}
public static final int GET_WEATHER_SUCCESS = 0x1; // 下一行的 网址可能有问题 忽略 主要看 逻辑流程
private static final String ROOT_PATH = "http://ws.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather?theUserID=&theCityCode=826";
private void query(final String city) {
new Thread(new Runnable() { //访问网络是耗时的,所以 用子线程 来执行
@Override
public void run() {
String path = ROOT_PATH;
try {
URL url = new URL(path); // 开启网络 连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
XmlPullParser xmlPullParser = Xml.newPullParser(); //Xml 静态方法 得到 XmlPullParser 对象
xmlPullParser.setInput(conn.getInputStream(),"utf-8"); //设置流标准
int eventType = xmlPullParser.getEventType();
ArrayList<String> list = new ArrayList<String>(); //接收 解析出来 的值 添加到集合
while(eventType!=XmlPullParser.END_DOCUMENT){
switch (eventType){
case XmlPullParser.START_TAG:
if("string".equals(xmlPullParser.getName())){ // 由于 全部是<string> , 只判断一个 标签名就行了
list.add(xmlPullParser.nextText()); // 得到 标签值 添加到 list
}
break;
}
eventType = xmlPullParser.next();
}
Message msg = weatherHandler.obtainMessage(GET_WEATHER_SUCCESS,list); // 把list 封装到 Message 对象 发送
weatherHandler.sendMessage(msg); // 发送 给 handleMessage
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
</span>