【发布时间】: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; 更新引脚中的AlertLevel、CodeNum 和MapCode 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
【问题讨论】: