我使用的是百度地图API来获取经纬度坐标。但是我的程序里面有多个地方用到了经纬度。
所以我就想把这个获取经纬度的方法写成公共方法,但是遇到了问题。首先是我修改了一点的百度获取经纬度坐标的代码!MyLocition.activity
package Dagaishang.Android;
import java.util.HashMap;
import java.util.Map;
import Dagaishang.Android.Utility.CmpDistance;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import android.location.Location;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.LocationListener;
public class MyLocation extends Activity {
// 自己的经纬度坐标
private Double myPointX, myPointY;
// 计算的两个经纬度之间的距离
private Double Distance;
LocationListener mLocationListener = null;// create时注册此listener,Destroy时需要Remove
Map<String, Object> myMap = new HashMap<String, Object>();
CmpDistance comDis = new CmpDistance();
String FriendPx;
String FriendPy;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylocation);
// getLocationByBaidu("0", "0",this);
}
// FriendPx,FriendPy为好友的经纬度坐标,返回值为计算后的两个坐标的点的距离
String getLocationByBaidu(String PointY, String PonitY,Activity tontext) {
FriendPx = PointY;
FriendPy = PonitY;
BMapApiDemoApp app = (BMapApiDemoApp)tontext.getApplication();
if (app.mBMapMan == null) {
app.mBMapMan = new BMapManager(this.getApplication());
app.mBMapMan.init(app.mStrKey,
new BMapApiDemoApp.MyGeneralListener());
}
app.mBMapMan.start();
// 注册定位事件
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
myPointX = location.getLongitude();
myPointY = location.getLatitude();
Distance = comDis.GetLongDistance(myPointX, myPointY,
Double.valueOf(FriendPx), Double.valueOf(FriendPy));
}
}
};
return String.valueOf(Distance);
}
@Override
protected void onPause() {
BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();
// 移除listener
app.mBMapMan.getLocationManager().removeUpdates(mLocationListener);
app.mBMapMan.stop();
super.onPause();
}
@Override
protected void onResume() {
BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();
// 注册Listener
app.mBMapMan.getLocationManager().requestLocationUpdates(
mLocationListener);
app.mBMapMan.start();
super.onResume();
}
}
其中的getLocationByBaidu()就是我想要使用到的获取经纬度并计算两个点之间距离的方法了,但是其中 if (app.mBMapMan == null) 在其他地方调用的时候会报空指针错误。不知道是不是因为传递过来的Activity不对或者说这里的getlocation()没有获取到东西。
问题
1.是否是因为这个activity没有显示,所以 BMapApiDemoApp app = (BMapApiDemoApp)tontext.getApplication();没有能获取到东西。怎么解决这个问题呢?
2.是否有其他办法来解决获取经纬度坐标的问题,实在不行 我就只有在每个需要 用到经纬度的地方把上面的那个方法写到那个activity里面了(我试过那样可以),但是代码太冗余了,重复的很多。
谢谢您看完真诚的解答!