【问题标题】:How to update information in the PIN on google map xamarin iOS using API如何使用 API 在 google map xamarin iOS 上更新 PIN 中的信息
【发布时间】: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

【问题讨论】:

    标签: c# ios xamarin


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多