2017-04-05 95 views
0

我曾經爲我的android應用程序使用過SQLite。我做了一個Queries.cs文件,其中存儲了所有查詢(createDatabase,insertDatabase等)。我有一個字符串作爲類變量,我在其中存儲了我想要放入.db文件的文件夾的路徑。它是這樣的:獲取適用於iOS和Android的應用程序路徑

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

現在我想的一樣,或者至少在應用坐在文件夾,但這個時候,我需要一個會從iOS的支持和形成的Android,因爲它是必要的方式。這個項目。你知道我該怎麼做嗎?

很多感謝

回答

2

在Xamarin.Forms中沒有提供統一的方法。您可以利用DependencyService從您的共享代碼中訪問它,並仍然根據平臺進行區分。這可能是這樣的,定義一個接口在你的共享代碼:

public interface IFilesystemService 
{ 
    string GetAppRootFolder(); 
} 

現在創建這樣在Android上實現:

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

對於iOS的想法是一樣的,只有實施可能會有所不同。當然,您可以根據需要擴展此類,例如可以讀取或寫入文件。

不要忘記用[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))] 我在哪裏有把這個在?我對此很陌生,對不起。我仍然得到空回 –

+0

我已經更新了答案 –

+0

我似乎仍然有錯誤。但是這次是用SQLiteConnection。你認爲你能幫助我嗎? :/ 我已經屏蔽了這個錯誤:http://puu.sh/va49n/f4431e525c.png –

0

你應該爲了獲得特定於平臺的文件路徑使用相關服務。關於如何在Xamarin.Forms中使用SQLite的一個很好的教程,可以找到here,它也可以在平臺特定的代碼中使用。

相關問題