我有一个类,如下所示:
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
在预期时被调用。
造成这种情况的原因是什么?我该如何解决它?
最佳答案
检查后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)
{
}
在调试器中检查结果
后,我可以在Instance
属性中看到我需要的值,我现在可以使用以下方法检索该值:
var propertyInfo = result.GetType().GetProperty("Instance");
var newResult =
propertyInfo.GetValue(result, null) as List<List<Dictionary<string, string>>>;
关于java - OnPostExecute 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43551539/