Java Google Maps移动摄影机方法上的空对象引用

Java Google Maps移动摄影机方法上的空对象引用,java,android,google-maps,geolocation,maps,Java,Android,Google Maps,Geolocation,Maps,我试图在谷歌地图上工作,即用标记获取当前位置,搜索位置,并根据搜索到的位置添加标记。我得到了这个错误 尝试在空对象引用上调用虚拟方法“void com.google.android.gms.maps.GoogleMap.moveCamera(com.google.android.gms.maps.CameraUpdate)” 我不明白为什么会出现这种情况,我想实例化GoogleMap变量可能有问题,但我不知道如何解决这个问题。这是我的密码: public class MapsActivity e

我试图在谷歌地图上工作,即用标记获取当前位置,搜索位置,并根据搜索到的位置添加标记。我得到了这个错误

尝试在空对象引用上调用虚拟方法“void com.google.android.gms.maps.GoogleMap.moveCamera(com.google.android.gms.maps.CameraUpdate)”

我不明白为什么会出现这种情况,我想实例化GoogleMap变量可能有问题,但我不知道如何解决这个问题。这是我的密码:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;
Location mLocation;
Location sLocation;
FusedLocationProviderClient client;
private static final int Request_Code = 101;
EditText txtSrch;
ImageButton btnSrch;


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    client = LocationServices.getFusedLocationProviderClient(this);
    getLastLocation();

btnSrch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            geolocate();
        }
    });
}
我提出了以下方法:

private void geolocate(){
       String search = txtSrch.getText().toString().trim();
       Geocoder geocoder = new Geocoder(MapsActivity.this);
       List<Address> list = new ArrayList<>();

   try{
        list = geocoder.getFromLocationName(search, 1);


   }
   catch (IOException e){
        e.printStackTrace();
   }

   if(list.size() > 0){
       Address address = list.get(0);
       moveCamera(new LatLng(address.getLatitude(), address.getLongitude()), 6, "Searched Location");
   }



}




private void moveCamera(LatLng latLng, float zoom, String title){
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
        MarkerOptions options = new MarkerOptions()
                .position(latLng)
                .title(title);
        mMap.addMarker(options);
   }

private void getLastLocation() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]
                {android.Manifest.permission.ACCESS_FINE_LOCATION}, Request_Code);
        return;
    }
    Task<Location> task = client.getLastLocation();
    task.addOnSuccessListener(new OnSuccessListener<Location>() {
        @Override
        public void onSuccess(Location location) {
            if(location != null){
                mLocation = location;
                Toast.makeText(getApplicationContext(),mLocation.getLatitude()+""+mLocation.getLongitude(), Toast.LENGTH_SHORT).show();
                double myLong = mLocation.getLongitude();
                double myLat = mLocation.getLatitude();
                SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
                supportMapFragment.getMapAsync(MapsActivity.this);
            }
        }
    });
}

@Override
public void onMapReady(GoogleMap googleMap) {
   LatLng latLng = new LatLng(mLocation.getLatitude(), mLocation.getLongitude());
   MarkerOptions markerOptions = new MarkerOptions().position(latLng).title("You Are Here");
   googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
   googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 6));
   googleMap.addMarker(markerOptions);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case Request_Code:
            if(grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                getLastLocation();
            }
            break;
    }
}
}
private void geologite(){
字符串搜索=txtSrch.getText().toString().trim();
Geocoder Geocoder=新的地理编码器(MapsActivity.this);
列表=新的ArrayList();
试一试{
list=geocoder.getFromLocationName(搜索,1);
}
捕获(IOE异常){
e、 printStackTrace();
}
如果(list.size()>0){
地址=list.get(0);
移动摄像机(新车床(address.getLatitude(),address.getLongitude()),6,“搜索位置”);
}
}
专用void-moveCamera(LatLng-LatLng、浮动缩放、字符串标题){
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,zoom));
MarkerOptions选项=新的MarkerOptions()
.位置(车床)
.头衔(头衔);
mMap.addMarker(选项);
}
私有void getLastLocation(){
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予和&ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u LOCATION)!=PackageManager.permission\u已授予){
ActivityCompat.requestPermissions(此,新字符串[])
{android.Manifest.permission.ACCESS_FINE_LOCATION},请求_代码);
返回;
}
Task=client.getLastLocation();
task.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共无效(位置){
如果(位置!=null){
位置=位置;
Toast.makeText(getApplicationContext(),mLocation.getLatitude()+“”+mLocation.getLatitude(),Toast.LENGTH_SHORT).show();
double myLong=mLocation.getLongitude();
double myLat=mLocation.getLatitude();
SupportMapFragment SupportMapFragment=(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
supportMapFragment.getMapAsync(MapsActivity.this);
}
}
});
}
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
LatLng LatLng=新LatLng(mLocation.getLatitude(),mLocation.getLongitude());
MarkerOptions MarkerOptions=新的MarkerOptions().position(latLng.title)(“您在这里”);
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,6));
googleMap.addMarker(markerOptions);
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
开关(请求代码){
案例请求代码:
如果(grantResults.length>0&&grantResults[0]==已授予PackageManager.PERMISSION){
getLastLocation();
}
打破
}
}
}

老实说,我认为实例化mMap变量有问题,我只是不知道该怎么办。任何帮助都将不胜感激

是的。你是对的。需要启动你的mMap

@Override
public void onMapReady(GoogleMap googleMap) {
mMap=googleMap;
}

//And before move camera, check mMap is not null

private void moveCamera(LatLng latLng, float zoom, String title){
if(mMap!=null){
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom));
        MarkerOptions options = new MarkerOptions()
                .position(latLng)
                .title(title);
        mMap.addMarker(options);
   }}

这回答了你的问题吗
我只是不知道该怎么办
在尝试使用它时,您应该确保它不为空。看起来您从未初始化过
mMap