再回复之前,先把百度地图API的网址给你:http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v4-2你在onReceiveLocation()中获取当前城市,获取成功后,开启新线程,做你剩下的任何操作呗。我最近刚用了百度api,为此还申请个百度开发者key,为了用它,好多操作啊。这是我的解决方式,供楼主参考 public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null) {
return;
}
params.put("reportTime", location.getTime());
//params.put("errorCode", location.getLocType()+"");
params.put("latitude", location.getLatitude()+"");
params.put("longitude", location.getLongitude()+"");
//params.put("radius", location.getRadius()+"");
if (location.getLocType() == BDLocation.TypeGpsLocation) {
//params.put("speed", location.getSpeed()+"");
//params.put("satellite", location.getSatelliteNumber()+"");
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
//params.put("addr", location.getAddrStr());
}
System.out.println("----->>> 当前时间 = "+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(new Date()));
System.out.println("----->>> latitude = " + location.getLatitude());
System.out.println("----->>> longitude = " + location.getLongitude());
new Thread(runnable_submitData).start();
}
}
你的所有操作都可以写在runnable_submitData这里。即使网络数据交互,也解决了。

解决方案 »

  1.   

         首先说下你对你代码的看法,从代码来看你应该是要做一个天气预报的应用。并且代码流程应该是进入应用首先定位,然后根据定位地点获取天气信息,最后在UI上显示。
         因此你目前纠结的问题就是你要在进入应用首先去定位并达到看到界面后就已经有了最新的天气显示,不知道这样理解对不对。但是这样有个弊端,就是你在进入的时候存在一个发起定位请求到收到定位返回信息,并接着要做天气信息的查询和解析,然后才是显示到View上。那么这个过程耗时和异常将会是无法控制的,连接超时,数据丢包,定位错误等等都会造成程序卡在第一个环节。
           所以我的建议是先初始化一个初始UI显示无效数据,同时用进度对话框做过渡另开线程去定位并监听定位返回接着获取天气信息并解析,期间如果有异常则做提示只显示初始界面,如果成功则直接刷新UI。这样应该是可以的。具体代码需要你自己来设计了。
          一点点意见,你可以参考。也欢迎更多大牛指导。