永远不会调用OnPostExecute

时间:2017-04-21 20:31:04

标签: java c# android xamarin xamarin.android

我有一个看起来像这样的课程:

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 个答案:

答案 0 :(得分:3)

检查this question后,我怀疑这可能与RunInBackground返回.NET类型(List)的事实有关。

更新

在弄乱了一些之后,我发现这样做的正确方法可能是定义以下两种方法:

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