繁体   English   中英

OnPostExecute永远不会被调用

[英]OnPostExecute never gets called

我有一堂课,看起来像这样:

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

是什么原因造成的,如何解决?

检查RunInBackground 此问题后 ,我怀疑这可能与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>>>;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM