Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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
C# 无法通过OnMapReady方法访问我的地图_C#_Android_Google Maps_Xamarin_Geolocation - Fatal编程技术网

C# 无法通过OnMapReady方法访问我的地图

C# 无法通过OnMapReady方法访问我的地图,c#,android,google-maps,xamarin,geolocation,C#,Android,Google Maps,Xamarin,Geolocation,我以前从未在Xamarin中做过任何事情,在Android中做的很少。我知道C、C++和一些C语言。 这不是Xamarin表单 我找了一会儿,什么也没找到。更令人沮丧的是,我发现人们可以在我无法访问他们的谷歌地图时,直接从其他方法访问他们的谷歌地图 当然,在这里,我可以访问我的地图。这是有限的兴趣,因为我想互动后,初始化它 public void OnMapReady(GoogleMap googleMap) { locationManager = GetSystemSe

我以前从未在Xamarin中做过任何事情,在Android中做的很少。我知道C、C++和一些C语言。 这不是Xamarin表单

我找了一会儿,什么也没找到。更令人沮丧的是,我发现人们可以在我无法访问他们的谷歌地图时,直接从其他方法访问他们的谷歌地图

当然,在这里,我可以访问我的地图。这是有限的兴趣,因为我想互动后,初始化它

public void OnMapReady(GoogleMap googleMap)
    {
        locationManager = GetSystemService(LocationService) as LocationManager;
        MapStyleOptions style;
        string styleString;
        using (StreamReader sr = new StreamReader(Assets.Open("map_style.json")))
            styleString = sr.ReadToEnd();
        style = new MapStyleOptions(styleString);
        googleMap.UiSettings.ZoomControlsEnabled = false;
        googleMap.UiSettings.CompassEnabled = false;
        googleMap.UiSettings.RotateGesturesEnabled = false;
        googleMap.UiSettings.TiltGesturesEnabled = false;
        googleMap.UiSettings.MyLocationButtonEnabled = false;
        googleMap.UiSettings.ZoomGesturesEnabled = false;
        googleMap.UiSettings.ScrollGesturesEnabled = false;
        googleMap.UiSettings.MapToolbarEnabled = false;
        googleMap.SetMapStyle(style);
        LatLng coords = new LatLng(lat, longi);
        CameraUpdate pos = CameraUpdateFactory.NewCameraPosition(new CameraPosition(coords, 19, 50, 0));
        googleMap.MoveCamera(pos);
        GMap = googleMap;
    }
在这里,我试图通过任何可能的方式访问我的地图。被评论的东西不起作用,我还试图声明我稍后将在OnMapReady中分配给googlemap的指针,这是不允许的

    public void OnLocationChanged(Location location)
    {
        lat = location.Latitude;
        longi = location.Longitude;
        LatLng coords = new LatLng(lat, longi);
        CameraUpdate pos = CameraUpdateFactory.NewCameraPosition(new CameraPosition(coords, 19, 50, 0));
        //googleMap.MoveCamera(pos); 
        //FragmentManager.FindFragmentById<MapFragment>(Resource.Id.googlemap).???
    }

提前感谢。

您正在将GoogleMap实例存储在名为
GMap
的变量中,该变量位于您的
OnMapReady
末尾

因此,在您的
OnLocationChanged
中使用该实例:

GMap?.MoveCamera(pos); 

只能在主线程上调用moveCamera

哦,我也这么做了。它也不起作用。因为我认为是另一个谷歌地图链接到。。。碎片还是什么?我对Xamarin和Android都不是很了解。不管怎样,用GMap这样做都不起作用。@Tohkai
。不起作用….
什么不起作用?是否为空,不移动摄像机等。。。?例外/Stacktrace/…?没关系,你说得对,我猜GMap/实际上是对实际地图的引用。我试着在OnMapReady中使用GMap.MoveCamera(pos),它成功了,因此,问题不是来自地图,而是我的“OnLocationChanged”方法没有被调用。看来我得调查一下了……我们没关系。正如我所说,这可能是一个在退出OnMapReady范围时丢失的副本。无论何时从外部调用moveCamera方法,它都无法工作。如中所示,当调用moveCamera时,它只是从不处理,线程永远不会到达它后面的行。然而,它在OnMapredy中工作。所以我相信我问的问题是正确的——我如何从这些方法之外影响我的地图?@Tohkai假设你有一个有效的
GoogleMap
,确保你在UI/主线程(
RunOnUiThread
)上调用
MoveCamera
)。
googleMap.MoveCamera(pos);
GMap?.MoveCamera(pos);