Xamarin.Forms(从PCL代码中的平台项目读取文件)

时间:2016-04-27 22:20:02

标签: android ios xamarin xamarin.forms portable-class-library

我正在使用PCL,iOS和Android项目构建Xamarin.Forms项目。我的一个要求是我必须从PCL读取存储在平​​台项目(iOS / Android)中的JSON文件。

我该怎么办?我找不到解决这个问题的方法。 :(

非常感谢, 尼古拉

2 个答案:

答案 0 :(得分:2)

如果要读取的文件嵌入在平台项目程序集中,则可以使用以下代码:

var assembly = typeof(MyPage).GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream("WorkingWithFiles.PCLTextResource.txt");
string text = "";
using (var reader = new System.IO.StreamReader (stream)) {
    text = reader.ReadToEnd ();
}

确保将WorkingWithFiles替换为项目的命名空间,将PCLTextResource.txt替换为文件名。

Loading Files Embedded as Resources查看Xamarin文档以获取更多详细信息

另一方面,如果您想在运行时创建和读/写文件,可以使用PCLStorage库:

public async Task PCLStorageSample()
{
    IFolder rootFolder = FileSystem.Current.LocalStorage;
    IFolder folder = await rootFolder.CreateFolderAsync("MySubFolder",
        CreationCollisionOption.OpenIfExists);
    IFile file = await folder.CreateFileAsync("answer.txt",
        CreationCollisionOption.ReplaceExisting);
    await file.WriteAllTextAsync("42");
}

答案 1 :(得分:1)

我通过使用IoC容器来实现它。

在我的iOS项目中,我创建了一个ConfigAccess类:

public class ConfigAccess : IConfigAccess
{
    public string ReadConfigAsString()
    {
        return System.IO.File.ReadAllText("config.json");
    }
}

我还必须将以下行添加到我的AppDelegate.cs

SimpleIoc.Default.Register<IConfigAccess, ConfigAccess>();

在我的PCL中,我只是在运行时询问ConfigAccess对象:

var configAccess = SimpleIoc.Default.GetInstance<IConfigAccess>();
var test = configAccess.ReadConfigAsString();