Xamarin.Forms DependencyService始终返回null

时间:2016-08-30 07:35:15

标签: c# xamarin.ios xamarin.forms

Hej,

我尝试使用Dependency Service从本机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);  
谢谢你的时间。

2 个答案:

答案 0 :(得分:0)

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

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

和方法声明为LoadApplicationModel

public async Task<ApplicationModel> LoadApplicationModel(string userName) {
}

也许那就是问题?尝试使用以下代码进行通话:

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

答案 1 :(得分:0)

首先反序列化文件内容并将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;
}