我有一个看起来像这样的课程:
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
返回.NET
类型 ( List
)的事实有关。
在搞乱了一些之后,我发现这样做的正确方法可能是定义以下两种方法:
protected override void OnPostExecute(Java.Lang.Object result)
{
base.OnPostExecute(result);
}
protected override void OnPostExecute(List<List<Dictionary<string, string>>> result)
{
}
WhereOnPostExecute(Java.Lang.Object result)
首先被调用,然后传递result
到 other 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>>>;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句