C#Xamarin android文件创建\写作和SQLite

时间:2014-04-28 01:54:14

标签: c# android sqlite file-io xamarin

这是我的第一篇文章,但我一直在搜索堆栈,以了解如何在Xamarin for Visual Studio中使用文本文件或SQLite数据库。我发现的所有示例都以java或旧的Mono android代码结束。

该应用程序的主旨是读取GPS数据,显示它,并保存纬度和经度以及一些识别信息,如房间号。我有应用程序的显示部分很好地工作,所以现在我需要找到一种方法来保存信息,以便数据可以传递到未来的类,以完成创建校园导航应用程序。

以下是一些相关部分:

path = GetDir("MCCMapping/",FileCreationMode.Append).ToString();

我不确定为文件创建目录设置是否正确。

String location = String.Format("{0}|{1}|{2}|{3}", roomNum.Text, campus.SelectedItem.ToString(), current.Latitude.ToString(),
                                             current.Longitude.ToString());
                using (data_file = new StreamWriter(path+"/MCC_ROOM_DATA.txt", true))
                {
                    data_file.WriteLine(location);
                }

这不太合适。我需要能够从应用程序外部访问.txt文件,甚至可以实现SQLite数据库来存储相同的信息。我拥有所有必要的清单权限。我的设备没有外部存储器,因此如果这是必须采用的路径,它将模拟它。

您可能需要帮助我的任何事情都将受到赞赏。感谢。

更新1:

folder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            conn = new SQLiteAsyncConnection(System.IO.Path.Combine(folder, "MCC_ROOMS.db"));
            conn.CreateTableAsync<Room>().ContinueWith(t => {});

和这个

public class Room
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Campus { get; set; }
    [Unique]
    public string Room_Num { get; set; }
    [Unique]
    public decimal Room_Latitude { get; set; }
    [Unique]
    public decimal Room_Longitude { get; set; }
}

我不太确定在继续部分中放入什么。此外,这是否允许我稍后从其他应用程序访问该表?感谢。

更新2:感谢Jason,我有一个有效的应用程序。我使用了内置的外部存储目录,然后可以在关闭usb调试时访问该文件。

1 个答案:

答案 0 :(得分:2)

Xamarin提供的枚举可帮助您获取允许访问的文件夹的文件夹路径。您不能只写入任意文件路径。

var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var filename = Path.Combine(path, "mydata.txt");

获得路径后,可以使用普通文件IO操作进行读写。

using (data_file = new StreamWriter(filename, true))
{
  data_file.WriteLine(location);
}

Xamarin的SQLite.Net组件有documentation,演示了如何在应用程序中创建和使用数据库。

string folder = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
var conn = new SQLiteConnection (System.IO.Path.Combine (folder, "stocks.db"));