Xamarin.Forms DependencyService 始终返回 null

Posted

技术标签:

【中文标题】Xamarin.Forms DependencyService 始终返回 null【英文标题】:Xamarin.Forms DependencyService always returns null 【发布时间】:2016-08-30 07:35:14 【问题描述】:

嘿嘿,

我正在尝试使用依赖服务从原生 ios 项目加载一些数据。

这是一项简单的任务,我试图反序列化我之前保存的一些数据,但无论我做什么总是返回 null。

如果我在 iOS 项目中使用调试器检查值,它们永远不会为空。 很奇怪,也许我错过了什么......

我的接口实现:

[assembly: Xamarin.Forms.Dependency(typeof(SaveRead))]
namespace LindeXF.iOS 
 public class SaveRead : ISaveRead 

        public async Task<ApplicationModel> LoadApplicationModel(string userName) 
            try 

                var userPath = CreatePathJson(userName);

                if (File.Exists(userPath)) 
                    await Task.Run(() => 
                        using (var file = File.OpenText(userPath)) 
                            var serializer = new JsonSerializer();
                            var m = (ApplicationModel) serializer.Deserialize(file, typeof(ApplicationModel));

                        
                    );
                
            
            catch (Exception ex) 
                throw new Exception(ex, "LoadApplicationModel()");
            

            return new ApplicationModel Username = userName;
        
    

在便携式项目中

DependencyService = Xamarin.Forms.DependencyService.Get<ISaveRead>();
var s = await ApplicationModel.DependencyService.LoadApplication(userName);  

感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

怀疑你是从依赖服务调用方法LoadApplication

var s = await ApplicationModel.DependencyService.LoadApplication(userName);

方法声明是LoadApplicationModel

public async Task<ApplicationModel> LoadApplicationModel(string userName) 

也许这就是问题所在?尝试使用以下代码进行调用:

var data = await DependencyService.Get<ISaveRead>()
        .LoadApplicationModel(userName);

【讨论】:

感谢您的回答,但这是我的错,我将错误的函数复制到 *** 中。我是这样打电话的:)我说得对,我检查了所有内容 100 次:) 啊,好吧...我认为它是因为您正在内部运行的等待任务...您正在使用断点进行调试? .如果是,那么您将获得价值,因为您为任务完成提供了时间延迟..【参考方案2】:

首先您反序列化文件内容并将 ApplicationModel 对象存储在 m 中。

using (var file = File.OpenText(userPath)) 
    var serializer = new JsonSerializer();
    var m = (ApplicationModel) serializer.Deserialize(file, typeof(ApplicationModel));

看起来一切都很好,但不是返回 m,而是创建一个新的 ApplicationModel 对象并返回它。

return new ApplicationModel Username = userName;

我认为你应该像这样(例如)返回m

using (var file = File.OpenText(userPath)) 
    var serializer = new JsonSerializer();
    var m = (ApplicationModel) serializer.Deserialize(file, typeof(ApplicationModel));
    m.Username = userName;
    return m;

【讨论】:

感谢您的宝贵时间,但我已经解决了这个问题,问题仍然存在

以上是关于Xamarin.Forms DependencyService 始终返回 null的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms:Forms.Context 已过时

Xamarin.Forms 手势密码实现

Xamarin.Forms 和 Xamarin Native 有啥区别? [关闭]

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

Xamarin Forms Prism:prism ResourceDictionary 中已存在具有键“Xamarin.Forms.NavigationPage”的资源

Xamarin.Forms.Forms.Init(e) Onlaunched 中的 FileNotFoundExeception