如何使用 API 在 google map xamarin iOS 上更新 PIN 中的信息

Posted

技术标签:

【中文标题】如何使用 API 在 google map xamarin iOS 上更新 PIN 中的信息【英文标题】:How to update information in the PIN on google map xamarin iOS using API 【发布时间】:2021-10-28 11:01:55 【问题描述】:

我从 API 获取数据,我想使用 xamarin 上的 ios 项目更新谷歌地图上自定义 pin 中的信息。

我这样声明我的 CustomPins:

CustomPin pin1 = new CustomPin
        
            Type = PinType.Place,
            Position = new Position(41.59043006333251, 24.766286971618303),
            Name = "Xamarin", 
            Label = "Bjala river - Smoljan",
            Address = "гр. Смолян",
            CodeNum = 1,
            AlertLevel = 2
        ;

customMap.CustomPins = new List<CustomPin> 
            pin1,
        ;

customMap.Pins.Add(pin1);

customMap.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(41.567797926753485, 25.389703182725665), Distance.FromKilometers(70)));
        Task.Run(async () => await APIConnection(customMap.CustomPins));

我的 API 连接方法如下所示:

public async Task APIConnection(List<CustomPin> pins)
    
        
        WaterBindingData waterData = await _restServiceData.GetWaterDataForecast(GenerateRequestUri(Constants.EndPoint), GenerateRequestUriStations(Constants.EndPoint));
        //BindingContext = waterData; 
            
            foreach (var water in waterData.WaterStation.Stations)
            
            int codeNum = water.CodeNum;
            int level = water.AlertLevelStation;
            int mapcode = water.MapCode;

                foreach (var item in pins)
                

                if (item.CodeNum == water.CodeNum)
                
                    item.AlertLevel = level;
                    item.CodeNum = codeNum;
                    item.MapCode = mapcode;
                
            
        
    

所以在waterData 中来自这个API 的数据我想用water.CodeNum;water.AlertLevelStation;water.MapCode; 更新引脚中的AlertLevelCodeNumMapCode API

问题: 问题出在:waterData 带有数据,我调试这段代码,他在 if else 语句中输入,而不是 更新 中的信息infoBoxWindow.. 这个问题怎么解决?

但数据在 waterData.WaterStations.Stations 中

---------更新--------

我试试这个方法:

    foreach (var water in waterData.WaterStation.Stations)

    int codeNum = water.CodeNum;
    int level = water.AlertLevelStation;
    int mapcode = water.MapCode;

    foreach (var item in pins)
    

       if (item.CodeNum == water.CodeNum)
       
           item.AlertLevel = level;
           item.CodeNum = codeNum;
           item.MapCode = mapcode;
       
    

customMap.Pins.Clear();
foreach(var item in pins)

    customMap.Pins.Add(item);

我在 main.cs 文件中收到错误:

Object reference not set to an instance of an object

【问题讨论】:

【参考方案1】:

在检索列表时更改属性不会更新地图中的 UI。

尝试清除并读取循环后的项目。

foreach (var water in waterData.WaterStation.Stations)

    int codeNum = water.CodeNum;
    int level = water.AlertLevelStation;
    int mapcode = water.MapCode;

    foreach (var item in pins)
    

       if (item.CodeNum == water.CodeNum)
       
           item.AlertLevel = level;
           item.CodeNum = codeNum;
           item.MapCode = mapcode;
       
    

customMap.Pins.Clear();
foreach(var item in pins)

    customMap.Pins.Add(item);

【讨论】:

在最后一行 customMap.Pins = pin;我收到错误:无法将属性或索引器 Map.Pins 分配给 -- 它是只读的 我在 main.cs 对象引用中收到另一个错误,未设置为对象实例检查我的更新 你能找出是哪一行导致了错误吗?尝试使用Try catch

以上是关于如何使用 API 在 google map xamarin iOS 上更新 PIN 中的信息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 在 Google Maps API 中仅获取一个标记

如何在现有较旧的 android 项目中使用最新 API 添加 Google Map?

如何在 iPhone 中使用 Google Maps API?

如何在google maps api中为省或某个城市提供一些颜色?

如何正确使用 Google Maps API? [复制]

如何从 Google Maps Directions Api 获取折线