Windows Phone 8附加到JSON文件

时间:2014-04-22 19:45:51

标签: json windows-phone-8 datareader storagefile

我正在使用Windows Phone 8应用。 我有问题附加到我的JSON文件。
如果我保持应用程序打开它可以正常工作但是一旦我关闭它并回来它就开始从文件的开头写回来。

相关代码:

private async void btnSave_Click(object sender, RoutedEventArgs e)
{
    // Create a entry and intialize some values from textbox...
    GasInfoEntries _entry = null;
    _entry = new GasInfoEntries();
    _entry.Gallons = TxtBoxGas.Text;
    _entry.Price = TxtBoxPrice.Text;
    _GasList.Add(_entry);

    //TxtBlockPricePerGallon.Text = (double.Parse(TxtBoxGas.Text) / double.Parse(TxtBoxPrice.Text)).ToString();

    // Serialize our Product class into a string    
    string jsonContents = JsonConvert.SerializeObject(_GasList);

    // Get the app data folder and create or open the file we are storing the JSON in.            
    StorageFolder localFolder = ApplicationData.Current.LocalFolder;
    StorageFile textfile = await localFolder.CreateFileAsync("gasinfo.json", CreationCollisionOption.OpenIfExists); //if get await operator error add async to class (btnsave)

    //open file
    using (IRandomAccessStream textstream = await textfile.OpenAsync(FileAccessMode.ReadWrite))
    {
        //write JSON string
        using (DataWriter textwriter = new DataWriter(textstream))
        //using (DataWriter textwriter = new DataWriter(textstream))
        {
            textwriter.WriteString(jsonContents);
            await textwriter.StoreAsync(); //writes buffer to store
        }
    }
}

private async void btnShow_Click(object sender, RoutedEventArgs e)
{
    StorageFolder localfolder = ApplicationData.Current.LocalFolder;
    try
    {
        // Getting JSON from file if it exists, or file not found exception if it does not
        StorageFile textfile = await localfolder.GetFileAsync("gasinfo.json");

        using (IRandomAccessStream textstream = await textfile.OpenReadAsync())
        {
            //read text stream
            using (DataReader textreader = new DataReader(textstream))
            {
                //get size ...not sure what for  think check the file size (lenght) then based on next 2 commands waits until its all read
                uint textlength = (uint)textstream.Size;
                await textreader.LoadAsync(textlength);
                //read it
                string jsonContents = textreader.ReadString(textlength);
                // deserialize back to gas info
                _GasList = JsonConvert.DeserializeObject<List<GasInfoEntries>>(jsonContents) as List<GasInfoEntries>;

                displayGasInfoEntries();

            }
        }
    }
    catch
    {
        txtShow.Text = "something went wrong";
    }      
}

private void displayGasInfoEntries()
{
    txtShow.Text = "";
    StringBuilder GasString = new StringBuilder();
    foreach (GasInfoEntries _entry in _GasList)
    {
        GasString.AppendFormat("Gallons: {0} \r\n Price: ${1} \r\n", _entry.Gallons, _entry.Price); // i think /r/n means Return and New line...{0} and {1} calls "variables" in json file
    }
    txtShow.Text = GasString.ToString();
}

由于

1 个答案:

答案 0 :(得分:1)

每次启动应用时,您都致电btnShow_Click吗?因为否则_GasList将为空;如果您现在拨打btnSave_Click,之前所做的所有更改都将丢失。

因此,请确保在将项目添加到_GasList之前恢复以前保存的json数据。