Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LocationServices.FusedLocationApi.getLastLocation(MGoogleAppClient)获取null_Java_Android_Maps - Fatal编程技术网

Java LocationServices.FusedLocationApi.getLastLocation(MGoogleAppClient)获取null

Java LocationServices.FusedLocationApi.getLastLocation(MGoogleAppClient)获取null,java,android,maps,Java,Android,Maps,在Mapready上运行包含此实现的活动时,我遇到以下错误: java.lang.NullPointerException:尝试调用虚拟方法 空对象上的“double android.location.location.getLatitude()” 参考文献 问题是mLastLocation似乎为空 @Override public void onMapReady(GoogleMap map) { distanceTraveled = 0; Criteria criteria

在Mapready上运行包含此
实现的活动时,我遇到以下错误:

java.lang.NullPointerException:尝试调用虚拟方法 空对象上的“double android.location.location.getLatitude()” 参考文献

问题是mLastLocation似乎为空

@Override
public void onMapReady(GoogleMap map) {

    distanceTraveled = 0;

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setBearingRequired(true);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    criteria.setAltitudeRequired(false);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
        float LOCATION_REFRESH_DISTANCE = 5000;
        long LOCATION_REFRESH_TIME = 0;
        mlocationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {

                updateLocation(location);
            }

            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) {

            }

            @Override
            public void onProviderEnabled(String s) {

            }

            @Override
            public void onProviderDisabled(String s) {

            }
        };

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, mlocationListener);
    }

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "NO Sleep");
    wakeLock.acquire();

    LatLng myPosition = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
    map.addMarker(new MarkerOptions().position(myPosition).title("myPosition"));
    map.moveCamera(CameraUpdateFactory.newLatLng(myPosition));

    draw();
    tracking = true;
    startTime = System.currentTimeMillis();

}
这就是我获得位置的方式

@Override
public void onConnected(Bundle connectionHint) {
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    }
}
有人知道为什么
LocationServices.FusedLocationApi.getLastLocation(mgoogleapClient)
在我的代码中为空吗

编辑:整个类代码

package com.noureddine_ouertani.www.wocelli50;

import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.PowerManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolylineOptions;

import java.util.ArrayList;
import java.util.List;


public class NeueRouteAufzeichnen extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

private LocationManager locationManager;
private Location mLastLocation;
private Location previousLocation;
private long distanceTraveled;

private boolean tracking = false;
private long startTime;
private PowerManager.WakeLock wakeLock;
private boolean gpsFix;

private static final double MILLISECONDS_PER_HOUR = 100 * 60 * 60;
private static final double MILES_PER_KILOMETER = 0.621371192;
private static final int MAP_ZOOM = 18;

private List<Location> locations;

private GoogleApiClient mGoogleApiClient;
LocationListener mlocationListener;
GoogleMap map;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }
    setContentView(R.layout.activity_neue_route_aufzeichnen);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    locations = new ArrayList<Location>();
}

protected void onStart() {
    mGoogleApiClient.connect();
    super.onStart();
}

protected void onStop() {
    mGoogleApiClient.disconnect();
    super.onStop();
}

@Override
public void onConnected(Bundle connectionHint) {
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    }
}

@Override
public void onConnectionSuspended(int i) {

}

public void addPoint(Location location) {
    locations.add(location);
}

@Override
public void onMapReady(GoogleMap map) {

    distanceTraveled = 0;

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setBearingRequired(true);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    criteria.setAltitudeRequired(false);
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
        float LOCATION_REFRESH_DISTANCE = 5000;
        long LOCATION_REFRESH_TIME = 0;
        mlocationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {

                updateLocation(location);
            }

            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) {

            }

            @Override
            public void onProviderEnabled(String s) {

            }

            @Override
            public void onProviderDisabled(String s) {

            }
        };

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, mlocationListener);
    }

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "NO Sleep");
    wakeLock.acquire();

    LatLng myPosition = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
    map.addMarker(new MarkerOptions().position(myPosition).title("myPosition"));
    map.moveCamera(CameraUpdateFactory.newLatLng(myPosition));

    draw();
    tracking = true;
    startTime = System.currentTimeMillis();

}

protected void updateLocation(Location location) {

    if (location != null && gpsFix == true) {
        addPoint(location);

        if (previousLocation != null)
            distanceTraveled += location.distanceTo(previousLocation);
    }
    previousLocation = location;
}

public void draw() {

    if (map == null) {
        return;
    }

    PolylineOptions options = new PolylineOptions();

    options.color(Color.parseColor("#CC0000FF"));
    options.width(5);
    options.visible(true);

    for (Location locRecorded : locations) {
        options.add(new LatLng(locRecorded.getLatitude(),
                locRecorded.getLongitude()));
    }

    map.addPolyline(options);

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}
}
package com.noureddine_ouertani.www.wocelli50;
导入android.content.Context;
导入android.content.pm.PackageManager;
导入android.graphics.Color;
导入android.location.Criteria;
导入android.location.location;
导入android.location.LocationListener;
导入android.location.LocationManager;
导入android.os.Bundle;
导入android.os.PowerManager;
导入android.support.annotation.NonNull;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.app.FragmentActivity;
导入com.google.android.gms.common.ConnectionResult;
导入com.google.android.gms.common.api.GoogleAppClient;
导入com.google.android.gms.location.LocationServices;
导入com.google.android.gms.maps.CameraUpdateFactory;
导入com.google.android.gms.maps.GoogleMap;
导入com.google.android.gms.maps.OnMapReadyCallback;
导入com.google.android.gms.maps.SupportMapFragment;
导入com.google.android.gms.maps.model.LatLng;
导入com.google.android.gms.maps.model.MarkerOptions;
导入com.google.android.gms.maps.model.PolylineOptions;
导入java.util.ArrayList;
导入java.util.List;
公共类NeueRouteAufzeichnen扩展了FragmentActivity在MapreadyCallback、GoogleAppClient.ConnectionCallbacks、GoogleAppClient.OnConnectionFailedListener上的实现{
私人场所经理场所经理;
私人场所;
私人位置优先位置;
私人长途旅行;
私有布尔跟踪=false;
私人长启动时间;
私有PowerManager.WakeLock WakeLock;
私有布尔gpsFix;
专用静态最终双毫秒每小时=100*60*60;
私人静态最终双英里每公里=0.621371192;
私有静态最终整数映射_ZOOM=18;
私人名单地点;
私人GoogleapClient MGoogleapClient;
LocationListener mlocationListener;
谷歌地图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(mGoogleApiClient==null){
mgoogleapclient=新的Googleapclient.Builder(此)
.addConnectionCallbacks(此)
.addOnConnectionFailedListener(此)
.addApi(LocationServices.API)
.build();
}
setContentView(R.layout.activity_neue_route_aufzeichnen);
SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
getMapAsync(这个);
位置=新的ArrayList();
}
受保护的void onStart(){
mGoogleApiClient.connect();
super.onStart();
}
受保护的void onStop(){
mGoogleApiClient.disconnect();
super.onStop();
}
@凌驾
未连接的公共无效(捆绑连接提示){
if(ActivityCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
mLastLocation=LocationServices.FusedLocationApi.getLastLocation(mgoogleapClient);
}
}
@凌驾
公共空间连接暂停(int i){
}
公共无效添加点(位置){
位置。添加(位置);
}
@凌驾
已于4月1日公开作废(谷歌地图){
距离=0;
标准=新标准();
标准.设定准确度(标准.准确度/精细度);
标准。需要设置(正确);
条件.setCostAllowed(true);
标准。设置功率要求(标准。功率低);
标准。setAltitudeRequired(false);
locationManager=(locationManager)getSystemService(位置服务);
if(ActivityCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予){
浮动位置\刷新\距离=5000;
长位置\刷新\时间=0;
mlLocationListener=新位置Listener(){
@凌驾
已更改位置上的公共无效(位置){
更新位置(位置);
}
@凌驾
状态已更改的公共void(字符串s、int i、Bundle){
}
@凌驾
已提供已启用的公共void(字符串s){
}
@凌驾
公共无效onProviderDisabled(字符串s){
}
};
locationManager.RequestLocationUpdate(locationManager.GPS\提供程序、位置\刷新\时间、位置\刷新\距离、MLLocationListener);
}
PowerManager PowerManager=(PowerManager)getSystemService(Context.POWER\u服务);
wakeLock=powerManager.newWakeLock(powerManager.PARTIAL_WAKE_LOCK,“无睡眠”);
wakeLock.acquire();
LatLng myPosition=新LatLng(mLastLocation.getLatitude(),mLastLocation.getLatitude());
addMarker(新的MarkerOptions().position(myPosition).title(“myPosition”);
地图。移动摄像机(CameraUpdateFactory.newLatLng(我的位置));
draw();
跟踪=真;
startTime=System.currentTimeMillis();
}
受保护的void updateLocation(位置){
if(位置!=null&&gpsFix==true){
地址(位置);
if(上一个位置!=null)
distanceTraveled+=位置。distanceTo(以前的位置);
}
先前位置=位置;
}
公众抽签(){
if(map==null){
返回;
}
PolylineOptions=新的PolylineOptions();