【发布时间】:2019-12-25 03:09:28
【问题描述】:
我在 Xamarin iOS 项目中有一个类,例如:
public class NetworkUtility : INetworkUtility
{
public void GetData()
{
NSUrl url = new NSUrl("https://reqres.in/api/users?page=2");
NSUrlRequest request = new NSUrlRequest(url);
NSUrlSession session = null;
NSUrlSessionConfiguration myConfig = NSUrlSessionConfiguration.DefaultSessionConfiguration;
myConfig.MultipathServiceType = NSUrlSessionMultipathServiceType.Handover;
session = NSUrlSession.FromConfiguration(myConfig);
NSUrlSessionTask task = session.CreateDataTask(request, (data, response, error) => {
Console.WriteLine(data);
});
task.Resume();
}
}
我是从共享项目中的一些 Xaml 代码中调用它,例如:
DependencyService.Get<INetworkUtility>().GetStringData();
现在在GetData() 函数中,我在匿名函数部分从网络服务获取数据:
NSUrlSessionTask task = session.CreateDataTask(request, (data, response, error) => {
Console.WriteLine(data);
});
如何将此数据返回给调用者(即返回到后面的 Xaml 代码)?
如果我将GetData() 函数的返回类型更改为字符串或任务并尝试在 lambda 表达式内返回,则会出现编译错误。
我阅读并且各种论坛都说我需要实现 NSUrlDelegate 来处理响应。我为此尝试了多种变体,但没有成功。请指教。
另外,(我认为这是不可能的或正确的方法)但是有没有办法将整个 NSUrlSession 返回到共享项目并只从共享项目本身调用数据任务方法?
【问题讨论】:
标签: c# xamarin nsurlsession nsurlsessiondownloadtask