2016-08-30 9 views
0

HEJ、依存関係サービスを使用して、ネイティブのiOSプロジェクトからいくつかのデータをロードしようとしているXamarin.Forms DependencyServiceは常にnull

イムを返します。

私が以前に保存したデータを単純化しようとする単純なタスクですが、それに関係なく、は常にを返します。

iOSプロジェクトでデバッガで値をチェックしても、nullになることはありません。 非常に奇妙な多分行方不明イム何か...

マイインタフェースの実装:

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

おかげで、あなたの時間のためのポータブルプロジェクトで

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

答えて

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

感謝。私はそう呼んでいます:)右のiveは100回すべてをチェックしています:) –

+0

ahhh okay ...私はあなたが内部で実行している待っているタスクのcozと思います...あなたはブレークポイントを使ってデバッグしていますか? 。もしそうなら、あなたは仕事のために時間の遅れを与えている価値のcozを得ている.. –

0

まず、あなたは、ファイルの内容をデシリアライズし、mにApplicationModelオブジェクトを格納します。

すべてのよさそうだが、代わりに mを返す、新しいApplicationModelオブジェクトを作成し、それを返す
using (var file = File.OpenText(userPath)) { 
    var serializer = new JsonSerializer(); 
    var m = (ApplicationModel) serializer.Deserialize(file, typeof(ApplicationModel)); 
} 

return new ApplicationModel {Username = userName}; 

私はあなたが(たとえば)このようなmを返すべきだと思う:私はstackoverflowのに間違った関数をコピーし、あなたの答えが、その私のせいため

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

あなたに感謝しますが、私はすでにこれを修正しました。 –