安卓代码优化(定位篇)

免费计算机类电子书资源,欢迎关注公众号“小黄鸽鸽叨叨叨”领取!

代码块

定位工具类:

package com.steptowin.eshop.common.tools;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;
import com.steptowin.eshop.m.sql.bean.Location;
import com.steptowin.library.base.app.Pub;
import com.steptowin.map.amap.AMapWrapper;

/**
 * Created by fjw on 2017/3/28.
 */

public class LocationHelper {

    static LocationHelper intance;
    private AMapWrapper mapWrapper;
    private double lat;
    private double longitude;
    Location myLocation;

    public static LocationHelper getInstance() {
        synchronized (LocationHelper.class) {
            if (intance == null) {
                intance = new LocationHelper();
            }
            return intance;
        }
    }

    public void updateLocation() {
        mapWrapper = AMapWrapper.newInstance(null);
        mapWrapper.getLocation(new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation aMapLocation) {
                if (aMapLocation.getErrorCode() == AMapLocation.LOCATION_SUCCESS) {
                    myLocation = Location.create(aMapLocation);
                    lat = aMapLocation.getLatitude();
                    longitude = aMapLocation.getLongitude();
                }
                //定位完就关掉
                mapWrapper.stop();
            }
        });
    }


    public String getDistance(String begin, String distance) {
        if (lat <= 0 || longitude <= 0 || Pub.IsStringEmpty(distance) || distance.equals("0"))
            return "暂无法获取距离";
        return begin == null ? "" : begin + distance + "km";
    }

    public double getLat() {
        updateLocation();
        return lat;
    }

    public void setLat(double lat) {
        this.lat = lat;
    }

    public double getLongitude() {
        return longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public Location getMyLocation() {
        updateLocation();
        return myLocation;
    }

    public void setMyLocation(Location myLocation) {
        this.myLocation = myLocation;
    }
}
  • 1

代码思路解析:

更新Helper池定位更新Helper池定位获取Helper池定位获取Helper池定位用Helper池的定位请求用Helper池的定位请求updateLocation()getLat() 、getLongitude()

getLat()或者getLongitude()可以去更新一下定位信息,刚进入更新的时候去更新一下。这样使用的时候只要

double lat = LocationHelper.getInstance().getLat();
        double longitude = LocationHelper.getInstance().getLongitude();
        DoHttp(new StwHttpConfig("你的地址")
                .put("lat",lat)
                .put("long", long)
                .setBack(new StwHttpCallBack<StwRetT<xxxx>>(getView(),
                        new TypeToken<StwRetT<xxx>>(){}){
                    @Override
                    public void onSuccess(StwRetT<xxxx> xxx) {
                        ....
                    }
                }));
  • 1

我再也不用担心我的定位啦;也不用考虑定位失败的问题;
失败的处理:

    public String getDistance(String begin, String distance) {
        if (lat <= 0 || longitude <= 0 || Pub.IsStringEmpty(distance) || distance.equals("0"))
            return "暂无法获取距离";
        return begin == null ? "" : begin + distance + "km";
    }
  • 1

高德地图错误是直接返回0;我这里判断如果0的话 就返回无法获取距离;如果后台返回“空”和“0”就是商家没有距离(这个和你们后台定义好就行)。这样的话 定位内容就全部统一处理了。

如果有人有强迫症,说那你不是永远都是加载上次的定位信息。
那么你可以在onCreate->updateLoction onResume去请求。我尝试过 ,高德的定位是是比这onCreate->onResume的时间要短; 这个你们也可以自己测试一下。如果对定位时间相差要求很高,可以使用这个方法。一般可以不用,基本上人都是不动。两种方式都可以,看你们需求而定。

总结

好了,定位优化就这里了,如果就是获取一下定位的 记得定位完就关掉哦,比较定位还是耗电和流量的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值