Java 融合位置提供程序不绘制连续线

Java 融合位置提供程序不绘制连续线,java,android,plot,Java,Android,Plot,有谁能帮我解决这样的问题,用熔合提供程序在最后和当前位置之间绘制连续线 onLocationChanged方法如下所示: public void onLocationChanged(Location mylocation) { logEvent("onLocationChanged"); mlastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); mCurr

有谁能帮我解决这样的问题,用熔合提供程序在最后和当前位置之间绘制连续线

onLocationChanged方法如下所示:

 public void onLocationChanged(Location mylocation) {

    logEvent("onLocationChanged");

    mlastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    mCurrentLocation = mylocation;
    plotroute(mylocation);        
    mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
}
和绘制路线方法:

public void plotroute (Location mylocation){
logEvent("------------Plotting route---------------");

mCurrentLocation = mylocation;

LatLng lastLatLng = new LatLng(mlastLocation.getLatitude(),mlastLocation.getLongitude());
LatLng thisLatLng = new LatLng(mylocation.getLatitude(),mylocation.getLongitude());
map.addPolyline(new PolylineOptions().add(lastLatLng).add(thisLatLng).width(20).color(Color.RED));
}
这是logcat的最后和当前位置输出

并绘制了路线图


如您所见,绘制的线不是连续的。有什么我应该改变的,使它顺利进行吗

您的问题是使用
getLastLocation()
作为行的另一端。相反,您应该始终记住在
onLocationChanged()
中收到的上一个位置,并从上一个位置到最新位置画一条线

“最后一个位置”是对当前位置的最佳估计,您的
mCurrentLocation
也是当前位置。有时这两个可能完全相同,你只需要画点而不是线。现在,在现实生活中,它们经常会有一些变化,所以你会得到一些彼此不相连的线路。您基本上是在绘制刚刚通过
onLocationChanged()
接收到的当前位置与通过
getLastLocation()
后面的逻辑估计的当前位置之间的差异

您的代码可能类似于:


感谢您的回复,当我这样更改它时,我在plotroute方法内的这一行得到null值:LatLng lastLatLng=new LatLng(mlastLocation.getLatitude(),mlastLocation.getLongitude());啊,对不起。第一次运行代码时,
mCurrentLocation
仍为
null
,因此
mLastLocation
将为
null
。代码可以检查
mCurrentLocation
是否仍然为
null
,在这种情况下,将
myLocation
分配给它。或者,如果
mlastLocation
为null,您可以选择不调用
plotroute()
。我创建了类似于if(mlastLocation==null){mlastLocation=LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);}的检查,尽管该多段线中存在一些小故障,但现在已经修复
public void onLocationChanged(Location mylocation) {

    logEvent("onLocationChanged");

    //mlastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    mlastLocation = mCurrentLocation;
    mCurrentLocation = mylocation;
    if (mlastLocation != null) {
        plotroute(mylocation);      
    }           
    mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
}