android 解析WeatherWebService中调用getSupportCity得到的xml文件(3)

这篇博客演示了如何在Android应用中使用HttpClient发起POST请求获取XML数据,然后使用DOM解析XML文档。主要步骤包括创建HTTP POST请求,设置参数,执行请求,读取响应,以及在后台线程中解析XML。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<pre name="code" class="java">package com.example.simpleclient;


import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;


public class SimpleClient extends Activity {


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		test();
	}
	
	public void test()
	{
		final Handler myHandler = new Handler() {
			public void handleMessage(Message msg) {
				switch (msg.what) {
				case 1:
					Log.i("tag", "返回到主线程。");
//					System.out.println("返回到主线程了");
					break;
				}
				super.handleMessage(msg);
			}
		};
		
		new Thread(new Runnable() {
			public void run() {
				HttpClient client = new DefaultHttpClient(); 
				StringBuilder builder = new StringBuilder();  
				HttpPost get = new HttpPost("http://www.webxml.com.cn/webservices/weatherwebservice.asmx/getSupportCity");  
				List<NameValuePair> params = new ArrayList<NameValuePair>(); 
				params.add(new BasicNameValuePair("byProvinceName", "ALL")); 
				try {
					get.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
					HttpResponse response = client.execute(get);
					BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));  
					for (String s = reader.readLine(); s != null; s = reader.readLine()) {  
		                builder.append(s);  
		            }  
					Log.i("tag", "百度返回的数据:" + builder.toString()); 
					byte[] midbytes=builder.toString().getBytes("UTF8");
					parseXML(midbytes);
				} catch (ClientProtocolException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				} 
				Message message = new Message();   
                message.what = 1; 
                myHandler.sendMessage(message);
			}
		}).start();
		
		
	}
	
	private boolean parseXML(byte[] bs) { 
        DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();   
        try {   
            DocumentBuilder domBuilder = domfac.newDocumentBuilder();   
//            InputStream is = new FileInputStream(new File("D:/test1.xml")); 
            InputStream is = new ByteArrayInputStream(bs);
            Document doc = domBuilder.parse(is);   
            Element root = doc.getDocumentElement();   
            NodeList books = root.getChildNodes();   
            if(books!=null){   
            	Log.i("tag", "length="+books.getLength());
                for (int i = 0; i < books.getLength(); i++) {   
                    Node book = books.item(i);  
                    
                        if(book.getNodeType()==Node.ELEMENT_NODE) {   
                        	Log.i("tag", "type 00000 ");
//                            String name=book.getNodeValue();
//                        	String name= book.getLocalName();
                        	String name = book.getTextContent();
                            Log.i("tag", "type 11111 name="+name);
                        }   
                }   
            }   
            return true;
        } catch (Exception e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        }   
        return false;
}   


	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}


}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值