我在C#/ Xamarin的跨平台PCL解决方案的Android部分工作 - 我对Xamarin和移动开发人员来说都是新手。
在循环中,我尝试查询REST服务以获取某些地理信息(工作正常),将结果反序列化为对象(也可以正常工作),然后将所述对象添加到列表中(工作正常< EM>一旦)。我遇到的问题是,每次获取反序列化对象的方法返回时,它们的集合都被神奇地清空(Count为0)。
这就是列表所在的位置:
List<Thingy> thingyList = new List<Thingy>();
//Setting some variables
//.
//.
using (HttpClient client = new HttpClient())
{
//Positive offset loop
for (double latUnderTest = Lat; latUnderTest <= latOffsetCoordsMax; latUnderTest += latOffset3M)
{
//Bound to our max coords
latUnderTest = latUnderTest > latOffsetCoordsMax ? latOffsetCoordsMax : latUnderTest;
for (double longUnderTest = Long; longUnderTest <= longOffsetCoordsMax; longUnderTest += longOffset3M)
{
//Bound to our max coords
longUnderTest = longUnderTest > longOffsetCoordsMax ? longOffsetCoordsMax : longUnderTest;
//Don't query areas we've already done
if (HasLocationBeenQueried(latUnderTest, longUnderTest))
{
continue;
}
Thingy thingy = await GetThingyForCoords(latUnderTest, longUnderTest, client);
if (thingy != null)
{
thingyList.Add(thingy);
AdjustQueriedArea(latUnderTest, longUnderTest);
}
}
}
//Negative offset loop, not reached for the purpose of this
//.
//.
return thingyList;
}
是的,循环有点恶心,但这只是一个快速而肮脏的第一次运行。无论如何,这是提出请求的方法:
public async Task<Thingy> GetThingyForCoords(double Lat, double Long, HttpClient Client)
{
try
{
using (HttpResponseMessage resp = await Client.GetAsync(aUrlIKnowWorks))
{
return resp.IsSuccessStatusCode ? JsonConvert.DeserializeObject<Thingy>(await resp.Content.ReadAsStringAsync()) : null;
}
}
catch (Exception e)
{
return null;
}
}
我没有在每次循环迭代中添加相同的对象或任何愚蠢的东西,并且请求不是每次都返回空值所以我不知所措 - 我的猜测是这有些奇怪与在移动设备上使用异步相关的线程相关问题,或HttpClient与Xamarin之间的一些未记录的不兼容问题,但我真的不知道从哪里开始调试。