我有一个看起来像这样的课程:
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
。
是什么导致这种情况,我该如何解决这个问题?
答案 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>>>;