2017-04-05 4 views
0

私はかつてAndroidアプリケーション用にSQLiteを使用しました。私はすべてのクエリ(createDatabase、insertDatabaseなど)が格納されていたQueries.csファイルを作成しました。私はクラス変数として文字列を持っていました。そこで、私が.dbファイルに入れたいフォルダのパスを保存しました。それはこのように見えた:。iOSとAndroidのアプリケーションパスを取得する

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

今、私は同じまたはアプリケーションが中に座って、少なくともフォルダをしたいしかし、それはのために必要であるので、この時間は、私は、iOSからサポートされています方法を必要とAndroidを形成しますこのプロジェクト私はそれをどのようにすることができるか知っていますか?

多くのおかげで、事前に

答えて

2

Xamarin.Formsには統一的な方法がありません。 DependencyServiceを利用して共有コードからアクセスしても、プラットフォームごとに区別することができます。これは、このようになり、あなたの共有コードでインターフェイスを定義します。

public interface IFilesystemService 
{ 
    string GetAppRootFolder(); 
} 

今、このようなアンドロイドの実装を作成:アイデアは同じであるiOSの

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

を、唯一の実装が異なる場合があります。もちろん、このクラスを拡張することもできます。例えば、ファイルの読み書きなどが可能です。

実装のネームスペースに[assembly: Xamarin.Forms.Dependency (typeof (FilesystemServiceAndroid))]属性を付けることを忘れないでください。そのような:

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

あなたは今、このようなあなたの共有コードでそれを取得することができます。var path = DependencyService.Get<IFilesystemService>().GetAppRootFolder();

+0

[アセンブリ:Xamarin.Forms.Dependency(typeof演算(FilesystemServiceAndroid))]私はこれを入れなければならないの に?私はこれで初めてです、ごめんなさい。私はまだnullを返す –

+0

私は答えを更新しました –

+0

私はまだエラーがあるようです。しかし今回はSQLiteConnectionを使用しています。あなたが私を助けることができると思いますか? :/ エラーをスクリーンショットしました:http://puu.sh/va49n/f4431e525c.png –

0

あなたは、プラットフォーム固有のファイルパスを取得するために、依存関係サービスを使用する必要があります。 Xamarin.FormsでSQLiteを使用する方法に関する素晴らしいチュートリアルは、hereであり、プラットフォーム固有のコードでも使用できます。

関連する問題