【问题标题】:Android - Refit throws UnknownHostException unexpectedlyAndroid - Refit 意外抛出 UnknownHostException
【发布时间】:2023-03-18 07:52:01
【问题描述】:

我正在尝试使用 Xamarin 实现 Refit,如果我之前在应用程序打开时未连接到 wifi,由于某种原因,它会引发 UnknownHostException (UHExc)。但这种情况并非始终如一。

我有两个调用 Refit 对我的“Refit-interface”的实例化:PostLoginAsyncGetDataAsync,如下所示(我一直遵循的指南是 @ 987654322@):

public async Task<SomeClass> PostLogin(string user, string password)
{
    SomeClass response = null;

    var loginTask = apiService.UserInitiated.PostLoginAsync(new RequestBody(user: user, password: password));
    response = await FireWebTask(loginTask);

    return response;
}

private async Task<List<Data>> GetRemoteDataAsync(string args)
{
    List<Data> list = null;

    var getDataTask = apiService.UserInitiated.GetDataAsync(args);
    list = await FireWebTask(getDataTask);

    return list;
}

“改装界面”看起来有点像这样:

...
[Post("/relative/url/to/login")]
Task<SomeClass> PostLoginAsync([Body(BodySerializationMethod.Json)] RequestBody requestBody);

[Get("/relative/url/to/data")]
Task<List<Data>> GetDataAsync([Header("SomeHeader")] string args);
...

当我在未连接到 Internet 的情况下打开应用程序并尝试发送 PostLogin 请求时,我得到了预期的 UHExc。如果我然后打开 wifi 并再次尝试(不关闭应用程序),我会再次获得 UHExc,只是这次几乎没有延迟,就像第一次一样(好像缓存了异常??)。重新启动应用程序并在不断开 wifi 的情况下重试即可正常工作。

如果我对第二个请求 (GetData) 执行完全相同的操作,我首先会得到一个 UHExc(显然),但是在重新连接 wifi 时它可以正常工作。所以在我看来,POST请求缓存了异常或其他东西,并反复抛出它而不尝试连接。我该如何解决这个问题(无论实际是什么问题)?

【问题讨论】:

  • 您是否曾经解决过这个问题,因为我遇到了 Refit 似乎缓存异常的类似问题?

标签: c# android xamarin httpclient refit


【解决方案1】:

我也遇到了这个问题,经过一些测试后发现问题出在Fusillade 库上。现在最初的问题是 fixing changes 没有反映在 NuGet 包中,因此您需要从 Github repo 下载最新源并引用较新的 dll。

看起来根本问题是由于失败的请求获得 enqueued and played back,即使请求导致了 WebException。

我将最新的代码包含到我的项目中并确认它们正在运行。

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    相关资源
    最近更新 更多