﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-qiyadeng</title><link>http://www.blogjava.net/qiyadeng/</link><description>专注于Java示例及教程</description><language>zh-cn</language><lastBuildDate>Sun, 15 Mar 2026 11:53:04 GMT</lastBuildDate><pubDate>Sun, 15 Mar 2026 11:53:04 GMT</pubDate><ttl>60</ttl><item><title>云监控服务比较</title><link>http://www.blogjava.net/qiyadeng/archive/2014/11/25/420575.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Tue, 25 Nov 2014 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2014/11/25/420575.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/420575.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2014/11/25/420575.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/420575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/420575.html</trackback:ping><description><![CDATA[<br />
<p style="margin-bottom: 1.3em; color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">现在做互联网产品的团队都比较小，也可能没有特别多运维人员。因此特别需要用一些系统或是工具来监控服务器或者是服务是否正常。之前比较直接的做法是自己搭建一套开源的监控系统，现在随着云服务器的流行，也有越来越多的人用户会使用云端的监控平台。</p>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">从我的经验来看，云服务器监控是有些特别的好处的：</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">1.自建的监控平台，有一部分问题是没办法发出警报。比如，一般监控服务器也会在内部网络中，如果出现外部网络问题，监控服务是没办法通知到相关人员（因为发邮件或者是发短信的通路也会出现问题）。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">2.自建的监控平台，只能检测到一个点的访问情况。阿里云监控平台可以检测杭州和青岛两个节点（这是我的帐号看到的），可以比较有效地了解非监测点的一个访问情况。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">3.云监控平台都有一套不错的管理界面，可有效减少部署维护和使用成本。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">下面我介绍一下，我使用过的一些云监控平台，并对他们的优点和缺点进行比较。</div>
<h3 style="color: #333333; font-family: Helvetica, Arial, sans-serif; line-height: 30px; background-color: #ffffff;">阿里云监控</h3>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">阿里的云服务器在市场中是做的很不错的，我的很多朋友都购买了阿里的云服务器。以阿里的公司实力，做一款云监控的产品应该不会差到哪里去。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">优点：</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">1.产品体验好，进入住界面就能轻而易举找到你想要的功能。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">2.监控功能全，包括站点监控、服务器监控和自定义监控。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">3.多点监控，可以在全国提供几个点的监控。从用户的角度了解服务是否可用。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">4.站点监控功能也很全面，包含SMTP、POP3、FTP监控。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">5.免费，且监控站点数没限制。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">缺点：</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">1.服务器监控和自定义监控，要求是云服务器，如果不是云服务器，只能使用站点检测功能。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<h3 style="color: #333333; font-family: Helvetica, Arial, sans-serif; line-height: 30px; background-color: #ffffff;">360网站服务监控</h3>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">360的个人用户产品很少使用，但是360的企业产品还真有不少做的不错的。说说360监控的优缺点。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">优点：</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">1.提供服务器监控。可以监控到服务器的磁盘，CPU，内存等情况。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">2.UI和告警都设计的不错。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">3.免费。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">缺点：</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">1.需要在服务器上开SNMP协议。（不过360提供很多脚本工具，可以一键安装）</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">2.有20台服务器的限制。（这个基本上够用，超过20台服务器，可以购买服务了）</div>
<h3 style="color: #333333; font-family: Helvetica, Arial, sans-serif; line-height: 30px; background-color: #ffffff;">监控宝</h3>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">名字很专一，一看就知道是专业做监控的。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">优点：</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">1.专注监控，界面设计还算可以。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">2.监控功能全面，内网采集的方式较多。可以采集数据库数据。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">缺点：</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">1.免费用户，服务器和网站监控都有限制，而且数量极少2台服务器监控，5台网站监控。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><hr />
</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">作者简介：<a href="http://www.qiyadeng.com" target="_blank" data-mce-href="http://www.qiyadeng.com">qiyadeng</a>(www.qiyadeng.com)对互联网技术、运营及市场领域有浓厚的兴趣，喜爱思考、阅读、讨论；擅长Java开发及分布式技术。现专注于互联网的创新产品&#8211;<a href="http://www.laolaibao.com/" target="_blank" data-mce-href="http://www.laolaibao.com/">老来宝</a>(http://www.laolaibao.com)，帮助年轻用户获得补充养老金，并提供养老金增值产品。</div><img src ="http://www.blogjava.net/qiyadeng/aggbug/420575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2014-11-25 17:49 <a href="http://www.blogjava.net/qiyadeng/archive/2014/11/25/420575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2014 中华架构师大会 回顾</title><link>http://www.blogjava.net/qiyadeng/archive/2014/11/17/420181.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Mon, 17 Nov 2014 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2014/11/17/420181.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/420181.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2014/11/17/420181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/420181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/420181.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">&nbsp;</span><br />
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">比较少参加这类大型的会议，进到会场的第一眼，发现会议室已经全部坐满，后来主办方发现站的人太多了，找来了一些小板凳，我快速找到一个小板凳坐下。坐下开始认真听，非常开心地听到广告时间结束，和我计划的时间完美一致。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">回顾一下我比较关系的几个主题</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<h3 style="color: #333333; font-family: Helvetica, Arial, sans-serif; line-height: 30px; background-color: #ffffff;"><span style="font-size: 18pt;">基于用户画像的大数据实例</span></h3>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">演讲嘉宾是联通沃商店的大数据技术经理，该大数据实例主要是通过联通营运商的数据和沃商店进行分析，通过绘制用户画像的形式，在其他应用场景，如广告、游戏下载中为用户推荐用户喜欢的产品。可以看出来嘉宾技术实例及基础功是十分不错，至少是一个硕士毕业。近些年被大家挂在嘴边的机器学习算法、推荐算法、语义分析都有部分介绍，实在是接受不过来；比较熟悉的还是我们当初硕士的专业方向推荐算法，看到了简单的介绍觉得很亲切。不过后来提问环节看，现场还是很多高人，有不少是做这个领域的。不过归根是国有企业和类似研究机构，是否能产生非常大的价值，我表示怀疑，不过这些算法一罗列，对经费的分配还是很有好处的。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<h3 style="color: #333333; font-family: Helvetica, Arial, sans-serif; line-height: 30px; background-color: #ffffff;"><span style="font-size: 18pt;">电商系统的心得分享</span></h3>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">这又是一个国有企业，号称是线上卖大力丸的人（国药1健康）。从技术成长为总经理，有很多心得体会。感觉和我有那么一点像，有一些体会也迫不及待的分析给这些年轻的IT从业者，为人严肃，总是会把困难估计的充分一点（估计年轻也没少教学费）。演讲中说了构建系统中的四个原则</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">权限独立，相互制约</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">非常务实的看到某些大型企业的，部门斗争。从系统层面开始设计制约（这个应该非常符合老板心意）。这个对很多小型企业在成才过程中是非常有帮助的。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">设计流程 &nbsp;减少犯错</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">在电商行业非常清楚客服和仓库的员工流动性，以及普遍受教育程度偏低，通过流程设计，而不是提高对用人的要求。这也是非常务实的方法。回顾之前在系统层面独自设计支持中央预订系统，设计出来的自动传真（当时网络不如现在易得）及新订单提醒（感谢施总的支持，增加音响进行声音）等等，简直觉得找到了知音。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">多了解一些财务知识。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">谈到的两点是数据之间需要有勾稽关系和不能修改历史数据，很骄傲我对财务的理解还是不错，从未犯过这种不靠谱的错误。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<h3 style="color: #333333; font-family: Helvetica, Arial, sans-serif; line-height: 30px; background-color: #ffffff;"><span style="font-size: 18pt;">跨平台大型在线客服系统的技术构架</span></h3>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">嘉宾谈了的是一套客服系统，比较多的关键字是客服妹子，可以看出IT从业者苦中作乐的精神。给我的体会是，客服系统都可以做成这样。从一个项目到一个产品，在云计算的世界，可以好一个客服的组件，也是有很大的价值。和我的理想事业很接近，可以花上一生中最精华的时间，做好一个有价值的小众专业的行业。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<h3 style="color: #333333; font-family: Helvetica, Arial, sans-serif; line-height: 30px; background-color: #ffffff;"><span style="font-size: 18pt;">阿里分布式数据库服务实践</span></h3>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">阿里的人就是高调，上场就调戏京东双11前系统崩溃。我也经历过很多系统崩溃，简直是开发人员的噩梦，也是IT人员信用受损的严重事件（因此我一直比较注意防止崩溃及崩溃后的快速恢复）。回到分布式数据库，这个是收获最大的一个演讲。虽然这个演讲看上去是再给阿里云的DRDS做宣传，但是嘉宾演讲的很进行，深入浅出地介绍了分布式数据库和单机数据库的区别。对分布式事务的重新认识是一个很大的收获，以前一直把教程中的数据库原理中的事务定义，作为分布式事务需要解决的问题，其实不是。需要更加务实，在淘宝阿里这类订单处理系统中，有一类对分布式事务的模式（异步消息机制）；在其他领域会有其他模式分布式的事务模型，这些分布式模型肯定都不满足单机的事务模型，但是可以满足和解决相应领域的问题。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<h3 style="color: #333333; font-family: Helvetica, Arial, sans-serif; line-height: 30px; background-color: #ffffff;"><span style="font-size: 18pt;">平台架构的服务器监控</span></h3>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;">一个APP的监控模型，猜测项目立项的原因，有两个。一个是和竞争对手的数据比较（UPYUN的对手主要是七牛），一个其实可以真正从用户的角度看，用户的体检速度如何，以及影响用户体验速度的真实原因。目前一般行业还不会做的这么细，因为UPYUN是技术支持公司，因此一定需要用这些数据去说服和支持用户。我们现在做的比较多的服务器的可用性、性能和应用的可用性、性能监控。前端时间刚好再比较，发现互联网上有不少好的监控平台，一般的创业公司，可以无需自己搭建监控平台，接入到相应的监控平台即可。下次再开文进行讨论。</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><br />
</div>
<div style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><hr />
</div>
<p style="margin-bottom: 1.3em; color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 17px; line-height: 30px; background-color: #ffffff;"><em>作者简介：qiyadeng(www.qiyadeng.com)对互联网技术、运营及市场领域有浓厚的兴趣，喜爱思考、阅读、讨论；擅长Java开发及分布式技术。现专注于互联网的创新产品--<a href="http://www.laolaibao.com">老来宝</a>(http://www.laolaibao.com)，立志于帮助广大凤凰（diao）男（si）提供补充养老金管理平台。</em></p><img src ="http://www.blogjava.net/qiyadeng/aggbug/420181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2014-11-17 14:57 <a href="http://www.blogjava.net/qiyadeng/archive/2014/11/17/420181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>google guava使用例子/示范(一)</title><link>http://www.blogjava.net/qiyadeng/archive/2013/06/13/400529.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Thu, 13 Jun 2013 15:18:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2013/06/13/400529.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/400529.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2013/06/13/400529.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/400529.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/400529.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: guava是Java的一个扩展类库，在google的许多项目中使用过了，现在最为一个 开源的Java类库广泛使用（http://code.google.com/p/guava-libraries/）。guava类库扩展的主要是这些相关类：collections(集合类),concurrency(并发),primitives,reflection(反射),comparison,I/O,hashi...&nbsp;&nbsp;<a href='http://www.blogjava.net/qiyadeng/archive/2013/06/13/400529.html'>阅读全文</a><img src ="http://www.blogjava.net/qiyadeng/aggbug/400529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2013-06-13 23:18 <a href="http://www.blogjava.net/qiyadeng/archive/2013/06/13/400529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你应该知道的8个Java牛人</title><link>http://www.blogjava.net/qiyadeng/archive/2013/05/08/399025.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Wed, 08 May 2013 13:56:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2013/05/08/399025.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/399025.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2013/05/08/399025.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/399025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/399025.html</trackback:ping><description><![CDATA[<p>简单介绍一下8个Java牛人，他们为Java社区，创建了框架（framework）,产品或者是写书，影响甚至改变了Java开发的方法(根据个人喜好排序)。  <p>8.Tomcat创始人  <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/05/20130507225154_91267.png">  <p>James Duncan Davidson，是当时Sun公司的软件工程师（1997-2001），创建了Java的Web服务器Tomcat，Tomcat广泛应用于Java Web开发的各个领域。  <p>7.测试驱动开发JUnit创始人  <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/05/20130507225223_76628.png">  <p>Kent Beck,极限编程和测试驱动开发方法的缔造者。此外，他还创造了JUnit,JUnit目前一次成为Java开发测试的事实标准。基于测试驱动的开发方法和JUnit给Java开发的方法带了巨大的变化。  <p>6.Java Collections框架设计者  <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/05/20130507225342_37553.png">  <p>Joshua Bloch,领导设计了Java平台的许多功能，包括Java 5.0 版本中饱受赞誉的Java Collections框架。2004年他离开Sun公司，成为Google的首席Java架构师，此外他的著作“Effective Java”基本上是学习Java的必读之书。  <p>5.JBoss创始人  <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/05/20130507225332_94733.png">  <p>Marc Fleury,在2001年创造了JBoss，JBoss是一个Java开源的应用服务器，也已经成为Java Web应用部署中的事实标准。后来他把JBoss买给了RedHat，之后继续从事JBoss的开发工作。不过2007年他离开了RedHat去追求他的个人爱好。  <p>4.Struts创始人  <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/05/20130507225320_46881.png">  <p>Craig Mcclanahan,创建了Struts，一个流行的基于Java的MVC开源框架，基本上很多Java开发者都知道如何开发Struts的应用程序。  <p>3.Spring创始人  <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/05/20130507225312_38608.png">  <p>Rod Johnson，Spring框架的创始人，Spring Source的CEO。Spring是一个非常流行的Java应用程序开发的开源框架。此外，他的著作Expert One-to-One J2EE Design and Development，是J2EE最有影响力的一本书。  <p>2.Hibernate创始人  <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/05/20130507225300_23825.png">  <p>Gavin King，Hibernate的创始人，一个流行的Java ORM解决方案；同时他也是Seam的创始人，此外他为EJB3.0和JPA也做出了突出的贡献。  <p>1.Java之父  <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/05/20130507225249_96915.png">  <p>James Gosling,1994年发明了Java语言，他创建了Java编译器和虚拟机。在2010年，当Oracle收购Sun公司时，他离开了Sun公司。  <p><strong>原创文章，作者：qiyadeng，转载请注明：</strong> 转载自<a href="http://www.qiyadeng.com/">http://www.qiyadeng.com/</a> <p><strong>本文链接地址:</strong> <a href="http://www.qiyadeng.com/%e4%bd%a0%e5%ba%94%e8%af%a5%e7%9f%a5%e9%81%93%e7%9a%848%e4%b8%aajava%e7%89%9b%e4%ba%ba/">你应该知道的8个Java牛人</a><img src ="http://www.blogjava.net/qiyadeng/aggbug/399025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2013-05-08 21:56 <a href="http://www.blogjava.net/qiyadeng/archive/2013/05/08/399025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>百度开发者中心BAE新建Java应用</title><link>http://www.blogjava.net/qiyadeng/archive/2013/04/21/398153.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Sun, 21 Apr 2013 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2013/04/21/398153.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/398153.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2013/04/21/398153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/398153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/398153.html</trackback:ping><description><![CDATA[<h4>1.申请开发者帐号</h4> <p>首先注册百度的帐号，然后申请成为百度开发者（需要通过手机进行身份证验证）。</p> <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225849_88674.jpg"></p> <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225903_66776.jpg"></p> <h4>2.新建应用</h4> <p>点击菜单中的创建应用，我们目前选择的是Web应用。</p> <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225922_56947.jpg"></p> <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225939_73707.jpg"></p> <p>应用创建之后，选择左边菜单的云环境，环境类型需要选择JAVA。</p> <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225954_94808.jpg"></p> <p>并新创建一个版本，输入1作为版本号</p> <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420230021_55667.jpg"></p> <h4>3.在百度集成开发环境中开始开发</h4> <p>百度提供了基于Eclipse的插件，由于该插件不能支持最新的Eclipse版本。建议下载百度的<a href="http://developer.baidu.com/wiki/index.php?title=docs/cplat/ide/install#.E4.B8.80.E9.94.AE.E5.AE.89.E8.A3.85">一键安装版本</a>。百度文档中介绍了如何使用开发环境，详细请看<a href="http://developer.baidu.com/wiki/index.php?title=docs/cplat/ide/using">集成开发环境使用</a>。</p> <p>打开百度集成开发环境，在Eclipse左下角点击Login to Baidu，使用你的账号登陆。然后点击工具栏中百度Logo，选择Import BAE Project，填入application和version</p> <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420231357_59203.jpg"></p> <p>之后选择Java作为Project Language。</p> <h4>4.解决项目错误</h4> <p>刚导入的BAE project，在Eclipse中会报错。通过problems view可以看到是因为JRE环境配置不正确和Web运行环境设置不正确。</p> <p>A.右键项目属性--选择JavaBuildPath,在Libraries中选择Add Library,之后再选择JRE System Library。</p> <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421104001_92093.jpg"></p> <p>B.接下来把Java project转换为Java Web Project（<a href="http://www.qiyadeng.com/eclipse%E4%B8%ADjava-project%E8%BD%AC%E6%8D%A2%E4%B8%BAjava-web-project/">Eclipse中Java Project转换为Java web Project</a>），注意如果你的tomcat是6版本的话，请注意选择Dynamic web Module的版本不超过2.5。</p> <p>设置Web应用的运行环境，在servers view中新建一个tomcat服务器。</p> <p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421112528_67532.jpg"></p> <p>C.和A类似，在Java Build Path中加入 Server Runtime，选择Tomcat。</p> <p>D.修改hello.jsp，在hello.jsp中加入如下代码</p> <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;%<br>String path = request.getContextPath();<br>String basePath = request.getScheme()+<span style="color: #006080">"://"</span>+request.getServerName()+<span style="color: #006080">":"</span>+request.getServerPort()+path+<span style="color: #006080">"/"</span>;<br>%&gt;</pre><br></div>
<p>E.把项目部署到tomcat中。</p>
<p>至此项目错误全部解决，应该可以看到运行结果。</p>
<p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421112501_60559.jpg"></p>
<h4>5.新建Servert测试</h4>
<p>新建一个Servlet，HomeServlet，Eclipse会自动在web.xml中加入配置信息,HomeServet.java和web.xml的部分代码如下：</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> doGet(HttpServletRequest request, HttpServletResponse response) <span style="color: #0000ff">throws</span> ServletException, IOException {<br>    doPost(request, response);<br>}<br><br><span style="color: #008000">/**</span><br><span style="color: #008000"> * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)</span><br><span style="color: #008000"> */</span><br><span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> doPost(HttpServletRequest request, HttpServletResponse response) <span style="color: #0000ff">throws</span> ServletException, IOException {<br>    PrintWriter out = response.getWriter();<br>    out.println(<span style="color: #006080">"&lt;h1&gt;BAE Servlet Test.&lt;/h1&gt;"</span>);<br>}</pre><br></div>
<p>web.xml中部分代码</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;servlet&gt;<br>  &lt;description&gt;&lt;/description&gt;<br>  &lt;display-name&gt;HomeServlet&lt;/display-name&gt;<br>  &lt;servlet-name&gt;HomeServlet&lt;/servlet-name&gt;<br>  &lt;servlet-<span style="color: #0000ff">class</span>&gt;com.qiyadeng.HomeServlet&lt;/servlet-<span style="color: #0000ff">class</span>&gt;<br>&lt;/servlet&gt;<br>&lt;servlet-mapping&gt;<br>  &lt;servlet-name&gt;HomeServlet&lt;/servlet-name&gt;<br>  &lt;url-pattern&gt;/HomeServlet&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;</pre><br></div>运行tomcat，可以看到如下运行成功，这样你就可以像一般的Java Web Project一样进行开发。 
<p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421113321_81212.jpg"></p>
<h4>6.最后</h4>
<p>BAE中Java环境中百度使用的Jetty，而不是tomcat，Jetty的好处是不需要频繁的重启，修改的代码即时就可看到运行结果。</p>
<p>通过SVN提交代码到BAE，如果有需要做小的修改，可以通过百度的在线编辑工具直接修改。</p>
<p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421113826_94673.jpg"></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.qiyadeng.com/">http://www.qiyadeng.com/</a> 
<p><strong>本文链接地址:</strong> <a href="http://www.qiyadeng.com/%e7%99%be%e5%ba%a6%e5%bc%80%e5%8f%91%e8%80%85%e4%b8%ad%e5%bf%83bae%e6%96%b0%e5%bb%ba%e5%ba%94%e7%94%a8/">百度开发者中心BAE新建Java应用</a></p><img src ="http://www.blogjava.net/qiyadeng/aggbug/398153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2013-04-21 13:35 <a href="http://www.blogjava.net/qiyadeng/archive/2013/04/21/398153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>百度开发者中心BAE新建Java应用</title><link>http://www.blogjava.net/qiyadeng/archive/2013/04/21/398152.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Sun, 21 Apr 2013 05:33:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2013/04/21/398152.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/398152.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2013/04/21/398152.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/398152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/398152.html</trackback:ping><description><![CDATA[<h4>1.申请开发者帐号</h4> <p>首先注册百度的帐号，然后申请成为百度开发者（需要通过手机进行身份证验证）。 </p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225849_88674.jpg" /> </p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225903_66776.jpg" /> </p><h4>2.新建应用</h4> <p>点击菜单中的创建应用，我们目前选择的是Web应用。 </p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225922_56947.jpg" /> </p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225939_73707.jpg" /> </p><p>应用创建之后，选择左边菜单的云环境，环境类型需要选择JAVA。 </p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420225954_94808.jpg" /> </p><p>并新创建一个版本，输入1作为版本号 </p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420230021_55667.jpg" /> </p><h4>3.在百度集成开发环境中开始开发</h4> <p>百度提供了基于Eclipse的插件，由于该插件不能支持最新的Eclipse版本。建议下载百度的<a href="http://developer.baidu.com/wiki/index.php?title=docs/cplat/ide/install#.E4.B8.80.E9.94.AE.E5.AE.89.E8.A3.85">一键安装版本</a>。百度文档中介绍了如何使用开发环境，详细请看<a href="http://developer.baidu.com/wiki/index.php?title=docs/cplat/ide/using">集成开发环境使用</a>。 </p><p>打开百度集成开发环境，在Eclipse左下角点击Login to Baidu，使用你的账号登陆。然后点击工具栏中百度Logo，选择Import BAE Project，填入application和version </p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130420231357_59203.jpg" /> </p><p>之后选择Java作为Project Language。 </p><h4>4.解决项目错误</h4> <p>刚导入的BAE project，在Eclipse中会报错。通过problems view可以看到是因为JRE环境配置不正确和Web运行环境设置不正确。 </p><p>A.右键项目属性--选择JavaBuildPath,在Libraries中选择Add Library,之后再选择JRE System Library。 </p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421104001_92093.jpg" /> </p><p>B.接下来把Java project转换为Java Web Project（<a href="http://www.qiyadeng.com/eclipse%E4%B8%ADjava-project%E8%BD%AC%E6%8D%A2%E4%B8%BAjava-web-project/">Eclipse中Java Project转换为Java web Project</a>），注意如果你的tomcat是6版本的话，请注意选择Dynamic web Module的版本不超过2.5。 </p><p>设置Web应用的运行环境，在servers view中新建一个tomcat服务器。 </p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421112528_67532.jpg" /> </p><p>C.和A类似，在Java Build Path中加入 Server Runtime，选择Tomcat。 </p><p>D.修改hello.jsp，在hello.jsp中加入如下代码</p> <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;%<br />String path = request.getContextPath();<br />String basePath = request.getScheme()+<span style="color: #006080">"://"</span>+request.getServerName()+<span style="color: #006080">":"</span>+request.getServerPort()+path+<span style="color: #006080">"/"</span>;<br />%&gt;</pre></div>
<p>E.把项目部署到tomcat中。
</p><p>至此项目错误全部解决，应该可以看到运行结果。
</p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421112501_60559.jpg" />
</p><h4>5.新建Servert测试</h4>
<p>新建一个Servlet，HomeServlet，Eclipse会自动在web.xml中加入配置信息,HomeServet.java和web.xml的部分代码如下：</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> doGet(HttpServletRequest request, HttpServletResponse response) <span style="color: #0000ff">throws</span> ServletException, IOException {<br />    doPost(request, response);<br />}<br /><br /><span style="color: #008000">/**</span><br /><span style="color: #008000"> * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)</span><br /><span style="color: #008000"> */</span><br /><span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> doPost(HttpServletRequest request, HttpServletResponse response) <span style="color: #0000ff">throws</span> ServletException, IOException {<br />    PrintWriter out = response.getWriter();<br />    out.println(<span style="color: #006080">"&lt;h1&gt;BAE Servlet Test.&lt;/h1&gt;"</span>);<br />}</pre></div>
<p>web.xml中部分代码</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">&lt;servlet&gt;<br />  &lt;description&gt;&lt;/description&gt;<br />  &lt;display-name&gt;HomeServlet&lt;/display-name&gt;<br />  &lt;servlet-name&gt;HomeServlet&lt;/servlet-name&gt;<br />  &lt;servlet-<span style="color: #0000ff">class</span>&gt;com.qiyadeng.HomeServlet&lt;/servlet-<span style="color: #0000ff">class</span>&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt;<br />  &lt;servlet-name&gt;HomeServlet&lt;/servlet-name&gt;<br />  &lt;url-pattern&gt;/HomeServlet&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;</pre></div>运行tomcat，可以看到如下运行成功，这样你就可以像一般的Java Web Project一样进行开发。 
<p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421113321_81212.jpg" />
</p><h4>6.最后</h4>
<p>BAE中Java环境中百度使用的Jetty，而不是tomcat，Jetty的好处是不需要频繁的重启，修改的代码即时就可看到运行结果。
</p><p>通过SVN提交代码到BAE，如果有需要做小的修改，可以通过百度的在线编辑工具直接修改。
</p><p><img alt="" src="http://www.qiyadeng.com/wp-content/uploads/2013/04/20130421113826_94673.jpg" /></p><p><br /></p><p><div><div style="margin-top: 15px; font-style: italic"> <p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.qiyadeng.com/">http://www.qiyadeng.com/</a></p> <p><strong>本文链接地址:</strong> <a href="http://www.qiyadeng.com/%e7%99%be%e5%ba%a6%e5%bc%80%e5%8f%91%e8%80%85%e4%b8%ad%e5%bf%83bae%e6%96%b0%e5%bb%ba%e5%ba%94%e7%94%a8/">百度开发者中心BAE新建Java应用</a></p> </div></div><br /> </p><img src ="http://www.blogjava.net/qiyadeng/aggbug/398152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2013-04-21 13:33 <a href="http://www.blogjava.net/qiyadeng/archive/2013/04/21/398152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Java中避免空指针异常(Null Pointer Exception)</title><link>http://www.blogjava.net/qiyadeng/archive/2013/04/11/397721.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Thu, 11 Apr 2013 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2013/04/11/397721.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/397721.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2013/04/11/397721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/397721.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/397721.html</trackback:ping><description><![CDATA[<p>空指针异常(Null Pointer Exception)是我们平时最容易碰到的，也是最令人讨厌的异常。本文介绍如何避免出现空指针异常。 </p> <p>首先我们看如下的示例</p> <div id="codeSnippetWrapper" class="csharpcode-wrapper"> <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">private</span> Boolean isFinished(String status) {  <br>     <span style="color: #0000ff">if</span> (status.equalsIgnoreCase(<span style="color: #006080">"Finish"</span>)) {  <br>       <span style="color: #0000ff">return</span> Boolean.TRUE;  <br>     } <span style="color: #0000ff">else</span> {  <br>       <span style="color: #0000ff">return</span> Boolean.FALSE;  <br>     }  <br>   }</pre><br></div><br></div>如果status的值为空的话，那么将会出现空指针异常（本例第2行）。所以我们应该使用如下的方法 
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">private</span> Boolean isFinished(String status) {<br>        <span style="color: #0000ff">if</span> (<span style="color: #006080">"Finish"</span>.equalsIgnoreCase(status)) {<br>            <span style="color: #0000ff">return</span> Boolean.TRUE;<br>        } <span style="color: #0000ff">else</span> {<br>            <span style="color: #0000ff">return</span> Boolean.FALSE;<br>        }<br>    }</pre><br></div>这样的话，如果status为空，也不会出现空指针异常。相信我们大多数朋友已经知道这样的方法了，如果一个对象可能为null，那么不需要直接调用它的方法。 
<p>接下来我将接着提供几种避免空指针的建议。 </p>
<p>1.判断Collection是否为空。 </p>
<p>2.使用一些判断方法。 </p>
<p>3.assert关键字。 </p>
<p>4.Assert类。 </p>
<p>5.异常处理。 </p>
<p>6.太多的点.操作语法。 </p>
<p>7.使用StringUtils类 </p>
<h4>1.判断Collection是否为空</h4>
<p>Collection 为空是指Collection中没有元素。一些开发者如果碰到Collection中没有元素的时候，经常return null，更好的做法是，你应该return Collections.EMPTY_LIST,Collections.EMPTY_SET或者是Collections.EMPTY_MAP. </p>
<p>错误的代码</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> List getEmployees() {  <br>   List list = null;  <br>   <span style="color: #0000ff">return</span> list;  <br> }  </pre><br></div>
<p>正确的代码</p>
<div id="codeSnippetWrapper" class="csharpcode-wrapper">
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> List getEmployees() {  <br>  List list = Collections.EMPTY_LIST;  <br>  <span style="color: #0000ff">return</span> list;  <br>}  </pre><br></div><br></div>
<h4>2.使用一些判断方法</h4>
<p>使用一些方法如contains(),indexOf(),isEmpty(),containsKey(),ContainsValue和hasNext()等来判断，确保不存在空值。 </p>
<p>示例：</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">String myName = <span style="color: #006080">"qiyadeng"</span>;  <br>  <br>List list = Collections.EMPTY_LIST;  <br><span style="color: #0000ff">boolean</span> exist = list.contains(myName);  <br><span style="color: #0000ff">int</span> index = list.indexOf(myName);  <br><span style="color: #0000ff">boolean</span> isEmpty =list.isEmpty();  <br>  <br>Map map =Collections.EMPTY_MAP;  <br>exist=map.containsKey(myName);  <br>exist=map.containsValue(myName);  <br>isEmpty=map.isEmpty();  <br>  <br>Set set=Collections.EMPTY_SET;  <br>exist=set.contains(myName);  <br>isEmpty=set.isEmpty();  <br>  <br>Iterator iterator;  <br>exist = iterator.hasNext();  </pre><br></div>
<h4>3.assert关键字</h4>
<p>在Java1.4版本之后，提供了断言assert来确定你的代码中的假设。使用的语法如下：</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">assert</span> expression1</pre><br></div>expression1是一个boolean表达式，如果expression1返回的false，系统将会抛出AssertError(没有详细信息)。 
<p>另外一种使用方法</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">assert</span> expression1:expression2</pre><br></div>如果expression1返回false，那么系统将会抛出AssertError，并且详细信息为expression2。 
<p>示例：</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> String getManager(String employeeId) {  <br>  <span style="color: #0000ff">assert</span> (employeeId != null) : <span style="color: #006080">"employeeId must be not null"</span>;  <br>  <span style="color: #0000ff">return</span> <span style="color: #006080">"qiyadeng"</span>;  <br>} </pre><br></div>我使用getManager(null)来调用getManger方法，最后运行的结果是"java.lang.AssertionError:employeedId must be not null" 
<blockquote>注意记得使用java选项中加入-enableassertion开启assertion功能。</blockquote>
<h4>4.Assert类</h4>
<p>Assert类在com.bea.core.repackaged.springframework.util包中，有许多方法可以用于断言。</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> String getManager(String employeeId) {  <br>  Assert.notNull(employeeId, <span style="color: #006080">"employeeId must be not null"</span>);  <br>  Assert.hasLength(employeeId, <span style="color: #006080">"employeeId must has length greater than 0"</span>);  <br>  <span style="color: #0000ff">return</span> <span style="color: #006080">"qiyadeng"</span>;  <br>}  </pre><br></div>当我同样使用getManager(null)来调用getManager方法，将获得信息"java.lang.IllegalArgumentException: employeeId must be not null"。 
<h4>5.异常处理</h4>
<p>使用try catch处理异常或是检查变量是否为空。</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> String getManager(String employeeId) {  <br>  <span style="color: #0000ff">return</span> null;  <br>} </pre><br></div>如上代码，我使用下面方法调用 
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">String managerId = getManager(<span style="color: #006080">"A015"</span>);  <br>System.out.println(managerId.toString());</pre><br></div>将会发生"java.lang.NullPointerException",为了处理这个异常，我们应该使用try catch来处理异常或者是检查变量是否为null。 
<p>try-catch方法</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">String managerId = getManager(<span style="color: #006080">"A015"</span>);  <br><span style="color: #0000ff">try</span> {  <br>  System.out.println(managerId.toString());  <br>} <span style="color: #0000ff">catch</span> (NullPointerException npe) {  <br>  <span style="color: #008000">//write your code here  </span><br>}</pre><br></div>或者是对变量进行检查 
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">String managerId = getManager(<span style="color: #006080">"A015"</span>);  <br><span style="color: #0000ff">if</span> (managerId != null) {  <br>  System.out.println(managerId.toString());  <br>} <span style="color: #0000ff">else</span> {  <br>  <span style="color: #008000">//write your code here  </span><br>} </pre><br></div>
<h4>6.不要太多的点.操作语法</h4>
<p>一些开发者使用太多的这样的方法来减少代码，但是这个对后面的维护和异常处理都是不太好的。 </p>
<p>错误的写法</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">String attrValue = (String)findViewObject(<span style="color: #006080">"VO_NAME"</span>).getCurrentRow().getAttribute(<span style="color: #006080">"Attribute_NAME"</span>);</pre><br></div>正确的写法 
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">ViewObject vo = findViewObject(<span style="color: #006080">"VO_NAME"</span>);  <br>Row row = vo.getCurrentRow();  <br>String attrValue = (String)row.getAttribute(<span style="color: #006080">"Attribute_NAME"</span>);</pre><br></div>
<h4>7.使用StringUtils类</h4>
<p>StringUtil是org.apache.commns.lang包中的类，我们可以使用该类来避免空指针异常。 </p>
<p>例如 StringUtils.isEmpty(),StringUtils.isBlank,StringUtils.equals()等等，更多的你可以参考<a href="http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html">文档</a>。 </p>
<p>为了不出现空指针异常，在写代码的过程中需要时刻检查你的代码是否会抛出NullPointerException，如果你没有时间及时调整的话，使用//TODO标记，便于你后面解决问题。</p>
<p>
<div>
<div style="font-style: italic; margin-top: 15px">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.qiyadeng.com/">http://www.qiyadeng.com/</a></p>
<p><strong>本文链接地址:</strong> <a href="http://www.qiyadeng.com/%e5%9c%a8java%e4%b8%ad%e9%81%bf%e5%85%8d%e7%a9%ba%e6%8c%87%e9%92%88%e5%bc%82%e5%b8%b8null-pointer-exception/">在Java中避免空指针异常(Null Pointer Exception)</a></p></div></div><img src ="http://www.blogjava.net/qiyadeng/aggbug/397721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2013-04-11 23:08 <a href="http://www.blogjava.net/qiyadeng/archive/2013/04/11/397721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>确定路名、标志性建筑和商场名的经度纬度</title><link>http://www.blogjava.net/qiyadeng/archive/2013/03/27/397075.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Wed, 27 Mar 2013 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2013/03/27/397075.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/397075.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2013/03/27/397075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/397075.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/397075.html</trackback:ping><description><![CDATA[<div><p>现在经常需要根据用户提供的位置，提供一些和位置相关的信息。有时可以直接确定用户的经度和纬度，有时不一定可以确定用户的经度和纬度信息，用户是 通过输入一些路名、标志性建筑或是商场名等位置，但是我们的数据库可能并没有存法用户可能输入的这些位置信息的经度纬度，这时候可以使用一些地图提供的 API来确定，用户所输入的位置信息的经度和纬度。</p>我们使用百度地图提供的GeoCoding API实现从位置信息到经度纬度的转换，详细的使用说明可以参考<a target="_blank" href="http://developer.baidu.com/map/geocoding-api.htm" data-ke-src="http://developer.baidu.com/map/geocoding-api.htm">GeoCoding API</a>。我们这里做一个简单的演示</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;getGeoCode(String&nbsp;query)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;ClientProtocolException,&nbsp;IOException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DefaultHttpClient();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;geoCodeRequestUrl(query);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,&nbsp;url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpGet&nbsp;httpget&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpGet(url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResponseHandler</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;responseHandler&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BasicResponseHandler();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;responseBody&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;httpClient.execute(httpget,&nbsp;responseHandler);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">百度返回的经度纬度信息xml</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">baidu&nbsp;response:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">responseBody);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;responseBody;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;geoCodeRequestUrl(String&nbsp;query)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;UnsupportedEncodingException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WeChatConstant.BASEURL&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">geocoder?address=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;URLEncoder.encode(query,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">UTF-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;key=</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;WeChatConstant.MAPKEY&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;output=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;WeChatConstant.OUTPUTFORMAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;url;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div><br /><div>使用JUnit进行测试<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Test<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;testGeoCode()&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BaiduMapService&nbsp;bms&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BaiduMapService();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;response&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;bms.getGeoCode(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">上地十街十号</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BaiduGeoCodeResponse&nbsp;res&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;BaiduGeoCodeResponse.getBaiduGeoCode(response);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">解析xml</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(res.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div></div><br /><br /><div>输出的结果</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">GeocoderSearchResponse</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">status</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">OK</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">status</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">result</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">location</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">lat</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">40.057098</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">lat</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">lng</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">116.307175</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">lng</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">location</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">precise</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">precise</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">confidence</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">80</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">confidence</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">level</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">道路</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">level</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">result</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">GeocoderSearchResponse</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />BaiduGeoCodeResponse&nbsp;[lat</span><span style="color: #000000; ">=</span><span style="color: #000000; ">40.057098</span><span style="color: #000000; ">,&nbsp;lng</span><span style="color: #000000; ">=</span><span style="color: #000000; ">116.307175</span><span style="color: #000000; ">]</span></div><br /><div><div style="margin-top: 15px; font-style: italic"> <p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.qiyadeng.com/">http://www.qiyadeng.com/</a></p> <p><strong>本文链接地址:</strong> <a href="http://www.qiyadeng.com/%e7%a1%ae%e5%ae%9a%e8%b7%af%e5%90%8d%e3%80%81%e6%a0%87%e5%bf%97%e6%80%a7%e5%bb%ba%e7%ad%91%e5%92%8c%e5%95%86%e5%9c%ba%e5%90%8d%e7%9a%84%e7%bb%8f%e5%ba%a6%e7%ba%ac%e5%ba%a6/">确定路名、标志性建筑和商场名的经度纬度</a></p> </div></div><br /><img src ="http://www.blogjava.net/qiyadeng/aggbug/397075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2013-03-27 22:08 <a href="http://www.blogjava.net/qiyadeng/archive/2013/03/27/397075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>周边信息查询</title><link>http://www.blogjava.net/qiyadeng/archive/2013/03/26/397023.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Tue, 26 Mar 2013 14:45:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2013/03/26/397023.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/397023.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2013/03/26/397023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/397023.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/397023.html</trackback:ping><description><![CDATA[<div>到了一个较陌生的环境，经常会在周边找一些基础设施，比如银行，商场，餐厅等（还有一种更急切的是找厕所）。通过百度提供的地图API，可以在你的应用中简单做到，详情可阅读<a target="_blank" href="http://developer.baidu.com/map/place-api.htm" data-ke-src="http://developer.baidu.com/map/place-api.htm">Place AP</a>I。我们以查找周边银行作为示例，需确定的参数至少有三个，要查找的位置的经度和纬度，需要查找的内容的类型或是关键字。</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;getPalace(String&nbsp;query,String&nbsp;lat,String&nbsp;lng)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;ClientProtocolException,&nbsp;IOException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DefaultHttpClient();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;palceRequestUrl(query,lat,lng);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,&nbsp;url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpGet&nbsp;httpget&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpGet(url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResponseHandler</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;responseHandler&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BasicResponseHandler();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;responseBody&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;httpClient.execute(httpget,&nbsp;responseHandler);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">位置xml</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">baidu&nbsp;response:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">responseBody);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;responseBody;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;palceRequestUrl(String&nbsp;query,String&nbsp;lat,String&nbsp;lng)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;UnsupportedEncodingException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WeChatConstant.BASEURL&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">place/search?query=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;URLEncoder.encode(query,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">UTF-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;key=</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;WeChatConstant.MAPKEY&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;location=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">lat</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">lng&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;radius=2000</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;output=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;WeChatConstant.OUTPUTFORMAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;url;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div><br /><div>Junit测试</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Test<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;testGetBaiduPlace()&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Exception{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BaiduMapService&nbsp;bms&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BaiduMapService();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;response&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;bms.getPalace(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">银行</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">39.915</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">116.404</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BaiduPlaceResponse</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;list&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;BaiduPlaceResponse.getBaiduPlace(response);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(BaiduPlaceResponse&nbsp;res:list){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(res.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div><br /><div>输出内容(省略部分内容)</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"&nbsp;</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">PlaceSearchResponse</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">status</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">OK</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">status</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">results</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">result</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">中国工商银行东长安街支行</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">location</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">lat</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">39.915891</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">lat</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">lng</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">116.41867</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">lng</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">location</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">address</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">东城区东长安街1号东方广场西三办公楼1楼</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">address</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">uid</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">a025683c73033c35a21de987</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">uid</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">detail_url</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">http://api.map.baidu.com/place/detail?uid=a025683c73033c35a21de987</span><span style="color: #FF0000; ">&amp;amp;</span><span style="color: #000000; ">amp;output=html</span><span style="color: #FF0000; ">&amp;amp;</span><span style="color: #000000; ">amp;source=placeapi</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">detail_url</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">tag</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">银行,王府井/东单</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">tag</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">result</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">results</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">PlaceSearchResponse</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />BaiduPlaceResponse&nbsp;[name=中国工商银行东长安街支行,&nbsp;telephone=null,&nbsp;address=东城区东长安街1号东方广场西三办公楼1楼,&nbsp;lat=39.915891,&nbsp;lng=116.41867,&nbsp;tag=null,&nbsp;detailUrl=http://api.map.baidu.com/place/detail?uid=a025683c73033c35a21de987</span><span style="color: #FF0000; ">&amp;amp;</span><span style="color: #000000; ">output=html</span><span style="color: #FF0000; ">&amp;amp;</span><span style="color: #000000; ">source=placeapi]<br /></span></div><br /><div><div style="margin-top: 15px; font-style: italic"> <p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.qiyadeng.com/">http://www.qiyadeng.com/</a></p> <p><strong>本文链接地址:</strong> <a href="http://www.qiyadeng.com/%e5%91%a8%e8%be%b9%e4%bf%a1%e6%81%af%e6%9f%a5%e8%af%a2/">周边信息查询</a></p> </div></div><br /><img src ="http://www.blogjava.net/qiyadeng/aggbug/397023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2013-03-26 22:45 <a href="http://www.blogjava.net/qiyadeng/archive/2013/03/26/397023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微信公众平台开发（三）--位置信息的识别</title><link>http://www.blogjava.net/qiyadeng/archive/2013/03/25/396983.html</link><dc:creator>qiyadeng</dc:creator><author>qiyadeng</author><pubDate>Mon, 25 Mar 2013 13:37:00 GMT</pubDate><guid>http://www.blogjava.net/qiyadeng/archive/2013/03/25/396983.html</guid><wfw:comment>http://www.blogjava.net/qiyadeng/comments/396983.html</wfw:comment><comments>http://www.blogjava.net/qiyadeng/archive/2013/03/25/396983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/qiyadeng/comments/commentRss/396983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/qiyadeng/services/trackbacks/396983.html</trackback:ping><description><![CDATA[<div><p>位置识别这是实际应用经常应用的消息，特别是很多商家，通过了解用户位置，给用户提供特别的产品或是商场的推荐。其中用户可能发送两种类型的消息：</p><p>1.微信地理位置信息</p><p>2.路名、标志性建筑或是商场名称</p><h2>1.微信地理位置消息</h2><p>认识一下，微信地理位置消息，包含一些什么信息</p></div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">xml</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ToUserName</span><span style="color: #0000FF; ">&gt;</span><span style="color: #0000FF; ">&lt;![CDATA[</span><span style="color: #808080; ">toUser</span><span style="color: #0000FF; ">]]&gt;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">ToUserName</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">FromUserName</span><span style="color: #0000FF; ">&gt;</span><span style="color: #0000FF; ">&lt;![CDATA[</span><span style="color: #808080; ">fromUser</span><span style="color: #0000FF; ">]]&gt;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">FromUserName</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">CreateTime</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1351776360</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">CreateTime</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">MsgType</span><span style="color: #0000FF; ">&gt;</span><span style="color: #0000FF; ">&lt;![CDATA[</span><span style="color: #808080; ">location</span><span style="color: #0000FF; ">]]&gt;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">MsgType</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Location_X</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">23.134521</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Location_X</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Location_Y</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">113.358803</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Location_Y</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Scale</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">20</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Scale</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Label</span><span style="color: #0000FF; ">&gt;</span><span style="color: #0000FF; ">&lt;![CDATA[</span><span style="color: #808080; ">位置信息</span><span style="color: #0000FF; ">]]&gt;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">Label</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">MsgId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">1234567890123456</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">MsgId</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">xml</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "> <br /></span></div><div><p>包含的主要信息有经度纬度和Label的位置。可以根据label中描述的位置信息，提供给用户对应的服务。也可根据用户的经度纬度信息，提供你最近的产品或是有地域性的产品。</p><p><img src="http://www.qiyadeng.com/wp-content/uploads/2013/03/20130325211752_99502.jpg" data-ke-src="/wp-content/uploads/2013/03/20130325211752_99502.jpg" alt="" /> </p>首先根据微信的地理位置信息，定义WeChatLocationMessage类，并能把Xml转换为WeChatLocationMessage对象</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;WeChatLocationMessage&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;toUserName;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;fromUserName;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;createTime;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;msgType;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;locationx;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;localtiony;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;scale;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;label;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;msgId;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;WeChatLocationMessage&nbsp;getWeChatLocationMessage(String&nbsp;xml){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XStream&nbsp;xstream&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;XStream(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DomDriver());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WeChatLocationMessage&nbsp;&nbsp;message&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.alias(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ToUserName</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">toUserName</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">FromUserName</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">fromUserName</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">CreateTime</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">createTime</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">MsgType</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">msgType</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Location_X</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">locationx</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Location_Y</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">localtiony</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Scale</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">scale</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Label</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">label</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">MsgId</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatLocationMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">msgId</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(WeChatLocationMessage)xstream.fromXML(xml);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;message;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">getter&nbsp;and&nbsp;setter</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">}</span></div><div>本文利用百度的地图API，查找最近的银行做为示例。</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;getPalace(String&nbsp;query,String&nbsp;lat,String&nbsp;lng)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;ClientProtocolException,&nbsp;IOException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DefaultHttpClient();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;palceRequestUrl(query,lat,lng);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,&nbsp;url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpGet&nbsp;httpget&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpGet(url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResponseHandler</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;responseHandler&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BasicResponseHandler();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;responseBody&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;httpClient.execute(httpget,&nbsp;responseHandler);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">baidu&nbsp;response:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">responseBody);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;responseBody;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;palceRequestUrl(String&nbsp;query,String&nbsp;lat,String&nbsp;lng)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;UnsupportedEncodingException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WeChatConstant.BASEURL&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">place/search?query=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;URLEncoder.encode(query,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">UTF-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;key=</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;WeChatConstant.MAPKEY&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;location=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">lat</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">lng&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;radius=2000</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;output=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;WeChatConstant.OUTPUTFORMAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;url;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>输出的结果<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">PlaceSearchResponse</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">status</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">OK</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">status</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">results</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">result</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">name</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">中国工商银行东长安街支行</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">name</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">location</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">lat</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">39.915891</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">lat</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">lng</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">116.41867</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">lng</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">location</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">address</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">东城区东长安街1号东方广场西三办公楼1楼</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">address</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">uid</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">a025683c73033c35a21de987</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">uid</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">detail_url</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">api.map.baidu.com/place/detail?uid=a025683c73033c35a21de987&amp;amp;amp;output=html&amp;amp;amp;source=placeapi</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">detail_url</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">tag</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">银行,王府井</span><span style="color: #000000; ">/</span><span style="color: #000000; ">东单</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">tag</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">result</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">results</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">PlaceSearchResponse</span><span style="color: #000000; ">&gt;</span></div><br /><div>接下来，把百度地图反映出来的最近位置信息，以图文消息的格式展示给微信用户</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;String&nbsp;getWeChatReplyNewsMessageByBaiduPlace(List</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">BaiduPlaceResponse</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;placeList,&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;lat,&nbsp;</span><span style="color: #0000FF; ">double</span><span style="color: #000000; ">&nbsp;lng,String&nbsp;userName,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;size){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WeChatReplyNewsMessage&nbsp;newsMessage&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;WeChatReplyNewsMessage();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Item</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;items&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ArrayList</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">Item</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;strBuf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;StringBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">placeList&nbsp;count=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">placeList.size());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newsMessage.setItems(items);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(placeList.size()</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">size){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newsMessage.setArticleCount(size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newsMessage.setArticleCount(placeList.size());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">article&nbsp;count=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">newsMessage.getArticleCount());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newsMessage.setCreateTime(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Date().getTime()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">""</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newsMessage.setMsgType(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">news</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newsMessage.setFuncFlag(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">0</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newsMessage.setToUserName(userName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newsMessage.setFromUserName(WeChatConstant.FROMUSERNAME);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">newsMessage.getArticleCount();i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BaiduPlaceResponse&nbsp;place&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;placeList.get(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;distance&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;GeoUtil.DistanceOfTwoPoints(Double.valueOf(place.getLng()),&nbsp;Double.valueOf(place.getLat()),&nbsp;lng,&nbsp;lat,&nbsp;GaussSphere.Beijing54);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Item&nbsp;item&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Item();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item.setTitle(place.getName()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">[</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">distance</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">米]</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">place.getAddress()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">place.getTelephone());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item.setPicUrl(</span><span style="color: #000000; ">""</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item.setUrl(place.getDetailUrl());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;item.setDescription(</span><span style="color: #000000; ">""</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;items.add(item);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">newMessage=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">newsMessage.toString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strBuf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;strBuf.append(getWeChatNewsMessage(newsMessage));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;strBuf.toString();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;String&nbsp;getWeChatNewsMessage(WeChatReplyNewsMessage&nbsp;newsMessage){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XStream&nbsp;xstream&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;XStream(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DomDriver());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.alias(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatReplyNewsMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ToUserName</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatReplyNewsMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">toUserName</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">FromUserName</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatReplyNewsMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">fromUserName</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">CreateTime</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatReplyNewsMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">createTime</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">MsgType</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatReplyNewsMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">msgType</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">ArticleCount</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatReplyNewsMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">articleCount</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Content</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatReplyNewsMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">content</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">FuncFlag</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatReplyNewsMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">funcFlag</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Articles</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;WeChatReplyNewsMessage.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">items</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.alias(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">item</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;Item.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Title</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;Item.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">title</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Description</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;Item.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">description</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">PicUrl</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;Item.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">picUrl</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.aliasField(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Url</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;Item.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">url</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;xstream.toXML(newsMessage);<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div><br /><div><h2>2.路名、标志性建筑或是商场名称</h2><p>对路名、标志性建筑等信息，方法还是通过第三方地图信息，确定输入的位置信息的经度纬度。</p><p>本文使用百度地图API，确定所查找的位置的经度和纬度。</p></div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;getGeoCode(String&nbsp;query)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;ClientProtocolException,&nbsp;IOException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpClient&nbsp;httpClient&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DefaultHttpClient();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;geoCodeRequestUrl(query);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,&nbsp;url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpGet&nbsp;httpget&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;HttpGet(url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResponseHandler</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">String</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;responseHandler&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BasicResponseHandler();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;responseBody&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;httpClient.execute(httpget,&nbsp;responseHandler);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.log(Level.INFO,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">baidu&nbsp;response:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">responseBody);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;responseBody;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;geoCodeRequestUrl(String&nbsp;query)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;UnsupportedEncodingException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;url&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;WeChatConstant.BASEURL&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">geocoder?address=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;URLEncoder.encode(query,</span><span style="color: #000000; ">"</span><span style="color: #000000; ">UTF-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;key=</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;WeChatConstant.MAPKEY&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&amp;output=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;WeChatConstant.OUTPUTFORMAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;url;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span></div><br /><div><p>确定了经度和纬度，问题就变成和第1种消息类型一致了，根据经度纬度去做相应处理。</p><p><img src="http://www.qiyadeng.com/wp-content/uploads/2013/03/20130324100033_15032.jpg" data-ke-src="http://www.qiyadeng.com/wp-content/uploads/2013/03/20130324100033_15032.jpg" alt="" /> </p><h2>3.源代码</h2><p>本文的代码较长，提供源代码下载。</p><a href="http://pan.baidu.com/share/link?shareid=349006&amp;uk=1560594324" data-ke-src="http://pan.baidu.com/share/link?shareid=349006&amp;uk=1560594324" target="_blank">WeChatDemo下载</a></div><br /><div><div style="margin-top: 15px; font-style: italic"> <p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.qiyadeng.com/">http://www.qiyadeng.com/</a></p> <p><strong>本文链接地址:</strong> <a href="http://www.qiyadeng.com/%e5%be%ae%e4%bf%a1%e5%85%ac%e4%bc%97%e5%b9%b3%e5%8f%b0%e5%bc%80%e5%8f%91%ef%bc%88%e4%b8%89%ef%bc%89-%e4%bd%8d%e7%bd%ae%e4%bf%a1%e6%81%af%e7%9a%84%e8%af%86%e5%88%ab/">微信公众平台开发（三）&#8211;位置信息的识别</a></p> </div></div><br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/qiyadeng/aggbug/396983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/qiyadeng/" target="_blank">qiyadeng</a> 2013-03-25 21:37 <a href="http://www.blogjava.net/qiyadeng/archive/2013/03/25/396983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>