J'ai utilisé une fois SQLite pour mon application Android. J'ai créé un fichier Queries.cs dans lequel toutes les requêtes étaient stockées (createDatabase, insertDatabase, etc.). J'avais une chaîne comme variable de classe où j'ai stocké le chemin du dossier que je voulais mettre dans mon fichier .db. Cela ressemblait à ceci:

private string folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);

Maintenant, je veux le même ou au moins le dossier dans lequel l'application se trouve. Mais cette fois, j'ai besoin d'un moyen qui sera pris en charge à partir d'iOS et forme Android car il est nécessaire pour ce projet. Savez-vous comment je peux faire ça?

Merci d'avance

0
B.Pumpkin 5 avril 2017 à 14:50

2 réponses

Meilleure réponse

Il n'existe aucun moyen unifié fourni dans Xamarin.Forms pour cela. Vous pouvez utiliser le DependencyService pour y accéder depuis votre code partagé et toujours différencier par plateforme. Cela pourrait ressembler à ceci, définissez une interface dans votre code partagé:

public interface IFilesystemService
{
    string GetAppRootFolder();
}

Créez maintenant une implémentation sur Android comme ceci:

public class FilesystemServiceAndroid : IFilesystemService
{
    public string GetAppRootFolder()
    {
        return System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
    }
}

Pour iOS, l'idée est la même, seule la mise en œuvre peut différer. Vous pouvez, bien sûr, étendre cette classe à votre guise avec la possibilité de lire ou d'écrire des fichiers par exemple.

N'oubliez pas de décorer votre espace de noms de l'implémentation avec l'attribut [assembly: Xamarin.Forms.Dependency (typeof (FilesystemServiceAndroid ))]. Ainsi:

[assembly: Xamarin.Forms.Dependency (typeof (FilesystemServiceAndroid ))]
namespace YourAppName
{
    public class FilesystemServiceAndroid : IFilesystemService
    {
        // ... code here
    }
}

Vous pouvez maintenant le récupérer dans votre code partagé comme ceci: var path = DependencyService.Get<IFilesystemService>().GetAppRootFolder();

2
Gerald Versluis 5 avril 2017 à 12:34

Vous devez utiliser un service de dépendance pour obtenir les chemins de fichiers spécifiques à la plate-forme. Un excellent tutoriel sur l'utilisation de SQLite dans Xamarin.Forms peut être trouvé ici qui peut également être utilisé dans le code spécifique à la plate-forme.

0
Emad 5 avril 2017 à 11:56