【问题标题】:Xamarin.Forms DependencyService always returns nullXamarin.Forms DependencyService 始终返回 null
【发布时间】:2023-03-20 09:09:01
【问题描述】:

嘿嘿,

我正在尝试使用依赖服务从原生 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);  

感谢您的宝贵时间。

【问题讨论】:

    标签: c# xamarin.ios xamarin.forms


    【解决方案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);
    

    【讨论】:

    • 感谢您的回答,但这是我的错,我将错误的函数复制到 stackoverflow 中。我是这样打电话的:)我说得对,我检查了所有内容 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;
    }
    

    【讨论】:

    • 感谢您的宝贵时间,但我已经解决了这个问题,问题仍然存在
    猜你喜欢
    • 2017-08-08
    • 2016-05-31
    • 2015-08-15
    • 2012-03-18
    • 2016-11-04
    • 2016-07-28
    • 2010-11-08
    • 2017-11-26
    • 2015-02-23
    相关资源
    最近更新 更多