通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端( 二 )


我创建了MapUtil类,用于获取位置信息
public class MapUtil {public LocationClient mLocationClient = null;//百度地图服务private MyLocationListener myListener=new MyLocationListener();//创建监听器public BDLocation location;public MapUtil(LocationClient mLocationClient,BDLocation location)this.mLocationClient=mLocationClient;//拿到百度地图api中的服务this.location=location;//拿到主线程中的netty对话管理器}public void init(){LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型option.setScanSpan(1000);// 可选 , 设置地址信息option.setIsNeedAddress(true);//可选,V7.2版本新增能力//如果设置了该接口,首次启动定位时 , 会先判断当前Wi-Fi是否超出有效期,若超出有效期 , 会先重新扫描Wi-Fi,然后定位option.setWifiCacheTimeOut(5*60*1000);//option.setIgnoreKillProcess(true);//可?。柚檬欠裥枰刂访枋?option.setIsNeedLocationDescribe(true);mLocationClient.setLocOption(option);//注入百度地图定位相关配置mLocationClient.registerLocationListener(myListener);//注册监听器mLocationClient.start();//启动服务mLocationClient.requestLocation();}public void stop(){mLocationClient.stop();//停止服务}public class MyLocationListener extends BDAbstractLocationListener {MyLocationListener(){}@Overridepublic void onReceiveLocation(BDLocation location1){//此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果//以下只列举部分获取经纬度相关(常用)的结果信息//更多结果信息获取说明,请参照类参考中BDLocation类中的说明 loction=loction1;}}}【通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端】我企图直接在Listener中拿到参数 , 结果是可以,但可以的不多

通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端

文章插图
数据只能停留在Listener中 , 无法带出Listener,因为Listener是在持续运行中的,相当于是一个while(true)的死循环,MapUtil中的Location确实可以拿到位置 , 但数据也卡在了Listener中 。
这个错误让我思考了很久 。最后,我意识到,也许在最开始,我思考的方向就不是正确的 , 或许它的流程应该是这样:
通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端

文章插图
于是我把MapUtil类中的传入的location改为了chatMangerpublic class MyLocationListener extends BDAbstractLocationListener {
MyLocationListener(){}@Overridepublic void onReceiveLocation(BDLocation location){//此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果//以下只列举部分获取经纬度相关(常用)的结果信息//更多结果信息获取说明,请参照类参考中BDLocation类中的说明CoderUtil coderUtil=new CoderUtil();//创建CoderUtil类用于处理文字MyAddress address=coderUtil.transform(location);//将百度地图中的location类通过CoderUtil转换为MyAddress类chatManager.sendData(address);//使用netty对话管理器发送处理完毕的地址}}以下为chatManger代码:public class ChatManager implements ChatListener{
private String TAG = ChatManager.class.getSimpleName();public static volatile ChatManager instance = null;private ChatClient chatClient = null;private Handler handler;public ChatManager(){chatClient=new ChatClient();}public static ChatManager getInstance(Handler handler) {if (instance == null) {synchronized (ChatManager.class) {if (instance == null) {instance = new ChatManager();}}}instance.setHandler(handler);return instance;}public void setHandler(Handler handler){this.handler = handler;}public void sendData(MyAddress address) {System.out.println("ChatManger正在发送数据");chatClient.sendMsgToServer(address, new ChannelFutureListener() {@Overridepublic void operationComplete(ChannelFuture future) throws Exception {if (future.isSuccess()) {Log.e(TAG, "发送成功");} else {Log.e(TAG, "发送失败");}}});}public void connectNetty(IpPortInfo ipPortSetInfo) {new Thread(new Runnable() {@Overridepublic void run() {Log.e(TAG, "客户端启动自动连接...");if (!chatClient.getConnectStatus()) {chatClient.setListener(ChatManager.this);chatClient.connect(ipPortSetInfo);} else {chatClient.disconnect();}}}).start();}@Overridepublic void onMessageResponse(ChannelHandlerContext ctx, String msg) {}@Overridepublic void onServiceStatusConnectChanged(int statusCode) {}}总而言之,就是一个记录Netty连接信息的类 。
通过netty把百度地图API获取的地理位置从Android端发送到Java服务器端

文章插图
最后终于成功?。。。。。。。。。。。。。。?
在遇到怎么想都无法解决的问题是,一定要有破釜沉舟的勇气啊各位 , 从问题的源头开始找,询问是不是自己一开始的方向就错了?。。?/h2>

推荐阅读