2016-08-30 5 views
0

Хей,Xamarin.Forms DependencyService всегда возвращает нулевое

им пытаются загрузить некоторые данные из родного проекта IOS с помощью Dependency службы.

Его простая задача, пытающаяся десриализовать некоторые данные, которые я сохранил ранее, но независимо от того, что я делаю это всегда возвращает null.

Если я проверяю значения с помощью отладчика в проекте iOS, они никогда не имеют значения null. Очень странно, может быть IM-то отсутствует ...

Моя Реализация интерфейса:

[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); 

спасибо за ваше время.

ответ

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); 
+0

Спасибо за ваш ответ, но это моя вина, я скопировал неправильные функции в StackOverflow. Я так называю :) Я называю это правильным ive проверял все 100 раз :) –

+0

ahhh okay ... Я думаю, что его coz ожидающей задачи вы работаете внутри ... вы отлаживаете с помощью точек останова? , если да, то вы получаете значение coz, которое вы даете временной задержке для выполнения задачи. –

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; 
} 
+0

Спасибо за то, что вы время, но я уже исправил эту проблему. –