【问题标题】:OnPostExecute never gets calledOnPostExecute 永远不会被调用
【发布时间】:2017-04-21 20:31:04
【问题描述】:

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

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&lt;string, string, string&gt;,但它们工作正常 - 即 OnPostExecute 在预期时被调用。

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

【问题讨论】:

    标签: java c# android xamarin xamarin.android


    【解决方案1】:

    检查this question后,我怀疑这可能与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>>>;
    

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 2016-07-20
      • 2013-11-07
      • 1970-01-01
      • 2012-10-27
      • 2013-10-12
      • 2012-03-27
      • 2013-08-29
      • 2013-11-03
      相关资源
      最近更新 更多