2017-04-05 206 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,它也可以在平台特定的代码中使用。

相关问题