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 2

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>>>;