雷鸣的游戏人生 2012-12-04 04:07 采纳率: 66.7%
浏览 14205
已采纳

如何将百度地图API获取经纬度写成公有方法!

我使用的是百度地图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里面了(我试过那样可以),但是代码太冗余了,重复的很多。

谢谢您看完真诚的解答!

  • 写回答

1条回答

  • franzhong 2012-12-04 04:25
    关注

    我也没见你调用这个方法啊?是否为空,一个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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料