我使用的是百度地圖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裡面了(我試過那樣可以),但是代碼太冗余了,重復的很多。
謝謝您看完真誠的解答!
我也沒見你調用這個方法啊?是否為空,一個log就明白了
你不是有這麼一句嗎
if (location != null) {
就在這裡調用,直接把這個location傳過去不就行了嗎,是不會空的
你所說的空,肯定是傳的時候就是空的,可以調試看看
對於這個徑緯度,要是我,我會分開,取得徑緯度不做好,我不會進行下一步
你現只需將此兩個變量值當成參數或是用結構體還是啥數據類型都一回事
Class VecLoc{
double latitude =0;//經度
double longitude =0;//緯度
float accuracy =0;//精度
double altitude =0;//海拔
float bearing =0;//方向
float speed =0;//速度
}
關健是能把數據送過去,此處在不在activity裡不重要,因為context可以傳送
另外還有一種方法,如果操作過多,你可以建立一個Handler消息通道
在任何地方都可以通過這樣來與之通信,特別你有多個類會很實用
Bundle data = new Bundle();
String mTAG = "LocationMessage";
String str="{\"latitude\":123,\"longtitude\":321}";
data.putString(mTAG,str);
Message msg = new Message();
msg.setData(data);
mHandler.sendMessage(msg);