gpt4 book ai didi

java - OnPostExecute 永远不会被调用

转载 作者:搜寻专家 更新时间:2023-11-01 08:27:19 25 4
gpt4 key购买 nike

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

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) 这一事实有关。

更新

经过一番折腾后,我发现正确的做法可能是定义以下两种方法:

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>>>;

关于java - OnPostExecute 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43551539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com