2017-10-02 5 views
0

Mise à jour: J'ai depuis été en mesure de créer une ressource de fichier texte pour le projet, dont le contenu est au format json. Cela semble fonctionner sans problème. Est-ce que c'est conventionnel? Je suppose que la question est toujours là.Ressource de la bibliothèque de classes et xamarin.android

J'ai une bibliothèque de classe que j'ai écrite et testée qui utilise un fichier json. A l'origine j'avais ceci comme un simple fichier accessible au projet. Je peux le désérialiser, l'utiliser, pas de problème.

Depuis, j'ai ajouté un projet xamarid.android à ma solution, développé mon interface, branché les choses, tout va bien. J'ai également référencé la bibliothèque de classes plus tôt que j'ai écrit et ai l'intention d'employer dans l'application androïde. Une fois que j'ai exécuté l'application et lancé la nouvelle classe, Visual Studio s'est arrêté et s'est plaint qu'il ne pouvait pas lire le fichier JSON en question.

Il était logique que le projet de bibliothèque de classes original fournissait simplement le fichier sur disque lors de la construction. Android ne connaît pas cet endroit.

choses que je l'ai déjà essayé, mais ne fonctionnent pas:

Construire Action: Ressource incorporée/ressources/Compile Ajout du fichier en tant que ressource de projet . Cela n'a pas fonctionné car Visual Studio pense que le fichier est binaire et que je ne peux pas le désérialiser ...?

Pour ce que ça vaut la peine, l'erreur (assez évident maintenant): System.IO.DirectoryNotFoundException: Impossible de trouver une partie du chemin « /Data/BattingAverageFlair.json ».

public List<Flair> Flair = JsonConvert.DeserializeObject<List<Flair>>(File.ReadAllText("Data/BattingAverageFlair.json")); 
public string GetFlair(double averge) => Flair.First(m => averge <= m.Max && averge >= m.Min).Flairtext; 

Idéalement ma bibliothèque de classe: BattingAverageCalculator doit être complètement indépendant de BattingAverage, mon Xamarin app android.

Merci pour les pointeurs!

Répondre

0

Vous ne pouvez pas ouvrir de fichiers à partir du package de l'application dans le code, à l'exception de certains cas particuliers tels que les images et les fichiers de configuration de l'application.

Deux options:

  1. Si le fichier JSON dont vous parlez est une sorte de configuration du fichier qui sera utilisé pour transmettre des paramètres à l'application dans le temps de développement. Utilisez les paramètres dans App.Config pour cela. Si vous utilisez une base de données de stockage local ou d'application client, vous devez créer le fichier en cours d'exécution (avec éventuellement des valeurs prédéfinies codées en dur) dans le dossier de la bibliothèque personnelle Android où vous pourrez y accéder plus tard dans du code.

Vous pouvez lire et écrire des fichiers dans le stockage local dans ce chemin du dossier:

Environment.GetFolderPath(Environment.SpecialFolder.Personal) 
+0

J'essaie délibérément de garder l'application et la logique de données (bibliothèque classe) séparée de l'interface utilisateur (Xamarin. Android). Le fichier json est une base de données qui doit être accessible lors de l'exécution et renvoie des types de données simples. – Steve

+1

Vous ne pouvez pas faire abstraction de l'accès aux fichiers. C'est complètement dépendant de la plateforme. Peut-être que vous pouvez obtenir une chaîne ou un flux comme entrée dans votre niveau inférieur. – Emad

+0

J'ai été en mesure d'ajouter le contenu et d'utiliser le json quand je l'ai ajouté en tant que ressource de projet, je présume parce que alors il est enveloppé dans la DLL et non externe. – Steve