获取服务器上的文件,在开发过程中应该是不陌生的一中操作,可以说是频繁的不能在频繁了,我使用的是Android应用去获取服务器上的文件,这里我也就是将这些代码保存在这,方便以后忘记的时候,回头还有得看,里面的命名是自己随便弄的,英语不好,不知道写什么。下面用代码说话还是比较实在
实现效果图:
获取网络数据,这里用的HttpClient方式来请求网络数据,
public class RequestData {
/**
* get请求
* @throws Exception
*/
public static InputStream getRequest(String path) throws Exception{
//创建HttpClient对象
HttpClient client=new DefaultHttpClient();
//创建get请求
HttpGet get=new HttpGet(path);
//执行请求并获取响应
HttpResponse response=client.execute(get);
//如果响应码为200就表示请求成功
if(response.getStatusLine().getStatusCode()==200){
//获取InputStream对象
InputStream is=response.getEntity().getContent();
return is;
}
return null;
}
}
解析xml工具类,用的是DOM解析
public class ParseXmlService {
/**
* 解析xml
* @throws Exception
*/
public static HashMap<String, String> parseXml(InputStream is) throws Exception{
//创建HashMap对象
HashMap<String, String> map=new HashMap<String, String>();
//创建解析器工厂类
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//创建DocumentBuilder对象
DocumentBuilder builder=factory.newDocumentBuilder();
//创建Document对象
Document document=builder.parse(is);
//获取根节点
Element root=document.getDocumentElement();
//获取所有子节点
NodeList childNodes=root.getChildNodes();
//变量子节点
for(int i=0;i<childNodes.getLength();i++){
Node childNode=childNodes.item(i);
if(childNode.getNodeType()==Node.ELEMENT_NODE){
//获取节点
Element childElement=(Element) childNode;
//版本号
if("version".equals(childElement.getNodeName())){
map.put("version", childElement.getFirstChild().getNodeValue());
}
//名称
else if("name".equals(childElement.getNodeName())){
map.put("name", childElement.getFirstChild().getNodeValue());
}
//下载路径
else if("url".equals(childElement.getNodeName())){
map.put("url", childElement.getFirstChild().getNodeValue());
}
}
}
return map;
}
}
这两个类就完成了请求数据与解析,接下来就在主程序中将解析的信息显示到界面的操作
public class MainActivity extends Activity {
//声明控件对象
private Button parseXml;
private TextView info;
//构建请求路径
String path="http://192.168.1.19:8080/zeng/version.xml";
//创建消息处理机制
private Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0x11:
//获取HashMap对象
HashMap<String, String> map=(HashMap<String, String>) msg.obj;
//设置TextView信息
info.setText("版本号:"+map.get("version")+"\n应用名称:"+map.get("name")+"\n下载路径:"+map.get("url"));
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置无标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//获取控件对象
parseXml=(Button) this.findViewById(R.id.btn_parse);
info=(TextView) this.findViewById(R.id.tv_info);
//为按钮绑定点击事件
parseXml.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(){
public void run() {
//获取InputStream对象
InputStream is;
try {
is = RequestData.getRequest(path);
//解析获取的xml
HashMap<String, String> map=ParseXmlService.parseXml(is);
//创建Message
Message msg=new Message();
msg.what=0x11;
msg.obj=map;
//将Message装载到Handler中
handler.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
}
});
}
}
当然还有一个最中要的,就是要到AndroidManifest.xml文件中配置访问网络的权限
<uses-permission android:name="android.permission.INTERNET"/>
这样才算的完成整个操作,代码就这么多咯,将就将就看,呵呵