OnPostExecute никогда не вызывается
У меня есть класс, который выглядит так:
internal class MyClass
: AsyncTask<string, int, List<List<Dictionary<string, string>>>>
{
protected override void OnPostExecute(List<List<Dictionary<string, string>>> result)
{
}
protected override List<List<Dictionary<string, string>>>
RunInBackground(params string[] jsonData)
{
var routes = new List<List<Dictionary<string, string>>>();
return routes;
}
}
Где AsyncTask
принадлежит Android.OS
И найти, что OnPostExecute
никогда не выполняется.
У меня есть другие классы, которые также наследуют от AsyncTask
(в частности, AsyncTask<string, string, string>
, но они работают правильно - т. е. OnPostExecute
вызывается, когда ожидается.
Что вызывает это, и как я могу обойти это?
1 ответ:
Проверив этот вопрос , я заподозрил, что это может быть связано с тем, что
RunInBackground
возвращает тип.NET
(List
).Обновление
Повозившись еще немного, я обнаружил, что это правильный способ сделать это, вероятно, определить следующие 2 метода:
protected override void OnPostExecute(Java.Lang.Object result) { base.OnPostExecute(result); } protected override void OnPostExecute(List<List<Dictionary<string, string>>> result) { }
, где
OnPostExecute(Java.Lang.Object result)
называется первым и переходитresult
в другойOnPostExecute
, который в какой-то момент преобразуетObject
в требуемыйList
.
Оригинальный Ответ
Итак Я добавил второй метод
OnPostExecute
, который действительно вызывается:protected override void OnPostExecute(Java.Lang.Object result) { }
После проверки
result
в отладчике я смог увидеть нужные мне значения в свойствеInstance
, которое теперь можно извлечь с помощью:var propertyInfo = result.GetType().GetProperty("Instance"); var newResult = propertyInfo.GetValue(result, null) as List<List<Dictionary<string, string>>>;