【问题标题】:Xamarin android app throws object not set when calling apiXamarin android 应用程序在调用 api 时抛出未设置的对象
【发布时间】:2021-02-13 08:31:40
【问题描述】:

所以我有一个 android 应用程序,它使用以下结构向 api 发出多个请求。请注意,这在 iOS 中有效,并且似乎在更新 xamarin 表单后开始发生。

public async Task<Rootobject> GetData()
{
    using (var httpClient = new HttpClient())
    {
        var response = await httpClient.GetAsync(url); //throws exception here. See screenshot
    }
}

这对我的所有请求都很好,除了一个请求,唯一的区别是这个请求是从任务工厂中调用的,如下所示:

tasks.Add(Task.Factory.StartNew(async()=>
{
    var data = await GetData();
}));

并调用如下:

Task.WhenAll(tasks).ContinueWith(t =>
{   
     IsBusy = false;              
}).GetAwaiter();

真正让我感到困惑的是,这在 iOS 中按预期工作。有谁知道我能做些什么来克服这个问题?

【问题讨论】:

  • 你的意思是它会抛出一个 NullReference 异常吗?具体哪条线路?什么是堆栈跟踪?您发布的代码是否完整?因为您没有显示任何返回值,所以您只是将结果分配给局部变量并将它们丢弃。
  • 是更新的帖子以显示错误及其发生的行。我没有选择不使用 Xamarin。我试图只发布问题所在,并且没有不相关的代码。
  • 请提供一个 MCVE(最小的、完整的、可验证的示例,因为我无法使用提供的代码重现此问题。请参阅:stackoverflow.com/help/mcve 您的代码有问题,因为您没有返回任何内容来自您的 Task 方法,因此甚至无法编译。还需要知道当“任务”变量中只有一个任务时是否会出现问题,或者是否仅在“任务”中出现多个任务时会出现问题。还有任务。除非您需要对任务创建选项等进行更细粒度的控制,否则建议使用 Run 而不是 Task.Factory.StartNew。
  • 我无法生成 mvce。原来我是在疯狂追逐,问题最终是github.com/alexrainman/CarouselView/issues/557

标签: android xamarin async-await task


【解决方案1】:

结果证明 api 根本没有问题,即使它看起来像这样,因为那是调试器会炸毁的地方,但结果问题是 https://github.com/alexrainman/CarouselView/issues/557 并且仍然是一个问题。我的解决方法是在 android 而不是插件时使用自定义轮播视图。希望这可以帮助没有像我一样花费近两天时间的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2018-12-13
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多